标签存档: shell

shell之sort

sort将文件进行排序,并将排序结果标准输出
基本语法: sort(选项)(参数)
选项
-n 按数值大小排序
-r 以相反顺序排序
-t 设置排序时用的分隔字符
-k 指定需要排序的列
参数
指定待排序的文件列表
案例

$cat sed.txt
a b 1
c d 8
e f 5 
g h 6
$sort -t " " -nk 3 sed.txt
a b 1
e f 5 
g h 6
c d 8
$sort -t " " -nrk 3 sed.txt
c d 8
g h 6
e f 5 
a b 1

shell之awk

awk是一个文本分析工具,把文件逐行读入,以空格为默认分隔符将每行切片,切开的部分再进行分析处理。
主要选项:
-F 指定分割符
-v 赋值一个用户定义变量
awk [选项] ‘正则表达式1{action} 正则表达式2{action2}’ filename
案例

$cp /etc/passwd ./
#1.搜索passwd文件以root关键字开头的所有行,并输出该行第7列。
$ awk -F : '/^root/{print $7}' passwd
#2.搜索passwd文件以root关键字开头的所有行,并输出该行第1列和第7列,中间","分割。
$ awk -F : '/^root/{print $1 "," $7}' passwd
#3.只显示/etc/passwd的第一列和第7列,以逗号分割,且在所有行前面添加列名user,shell在最后一行添加"ha,/cool/girl"
$awk -F : 'BEGIN{print "user,shell"} {print $1","$7}END{print "ha,/cool/girl"}' passwd
#4.将passwd中用户id(即第3列)增加数值1并输出
$awk -F : -v i=1 '{print $3+i}' passwd
#4.内置变量NF多少列,NR已读的记录数即行数
$awk -F : '{print FILENAME"," NR"," NF}' passwd
#5.查询sed.txt中空格所在的行号
$awk '/^$/{print NR}' sed.txt

shell之sed

sed是一种流编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为 “模式空间”,接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一个,这样不断重复,直到文件末尾。文件内容并没有改变,除非你使用重定向存储输出。
a add
d delete
s search/replace
-e 几条命令
案例:

$vim sed.txt
a b
c d
e  f

g  h
#1.将“boys”插入到sed.txt的第二行下,打印
$sed "2a boys" sed.txt 
a b
c d
boys
e f 

g h
$cat sed.txt
a b
c d
e f 

g h
#2.删除sed.txt中所有包含c的行
$sed "/c/d" sed.txt
a b
e f 

g h
#3.将sed.txt文件中c替换成haha,全局替换g
$sed "s/c/haha/g" sed.txt
a b
haha d
e f 

g h
#4.将sed.txt中第二行删除并将h替换为haha
$sed -e '2d' -e 's/h/haha/g' sed.txt
a b
e f 

g haha

shell之cut

cut -f 列号 -d 分隔符
案例:

$touch cut.txt
$vim cut.txt
a b
c d
e  f
g  h
#1.获得cut.txt的第一列
$cut -d " " -f 1 cut.txt
a
c
e
g
$cut -d " " -f 2 cut.txt
b
d
$ cut -d " " -f 2,3 cut.txt
b
d
 f
 h
#2.过滤以c开头的行
$cat cut.txt | grep c
c d
#3.获取c
$cat cut.txt | grep c| cut -d " " -f 1
c
#4.选取系统PATH变量值,第2个:开始后的所有路径
$echo $PATH | cut -d : -f 3-
#5.切割ifconfig后打印的ip地址
$ifconfig lo0 | grep "inet " | cut -d " " -f 2

shell知识备查

工作中经常用到shell命令,记录下常用的备查:

1 系统变量$HOME $PWD(当前路径) $USER $SHELL

2 自定义变量

a=1 #注意=附近没有空格
echo $a
1

3 特殊变量$n,$#,$*,$@,$?

#!/bin/bash
#输入参数
echo $0 $1 $2 $3
#打印参数个数
echo $#
#打印所有参数,整体
echo $*
#打印所有参数,区分
echo $@
#上一条命令是否执行成功
echo $?

4 运算符

a=$[(1+2)*4]#(没有空格)
echo $a
expr 1 \* 2 #(有空格)

5 条件判断

[ 2 -ge 1 ] #注意[]有空格2>=1 greater equal
echo $? #0代表执行成功,非0代表没有正常执行

6 流程控制

#if语句注意空格
if [ $1 -eq 1 ];then
echo "this is 1"
elif [ $1 -eq 2 ]
then
echo "this is 2"
fi

#case 语句
case $1 in
1)
echo "case 1"
;;
2)
echo "case 2"
;;
*)
echo "case other"
;;
esac

#for循环
s=0
for((i=1;i<=100;i++))
do
        s=$[$s+$i]
done
echo $s #5050

#for循环2-打印所有输入参数
#所有参数放在一行
for i in "$*"
do 
    echo "input $i"
done

#一个参数一行
for j in $@
do 
    echo "input $j"
done

#while循环
i=0
s=0
while [ $i -le 100 ]
do
    s=$[$s+$i]
    i=$[$i+1]
done
echo $s #output 5050

7 read读取控制台输入

#!/bin/bash
#8秒内输入名字
read -t 8 -p "input your name " NAME
echo $NAME

8 函数

basename /home/1.txt
output: 1.txt
basename /home/1.txt .txt
output 1 #截取文件名称

dirname /home/1.txt
output /home #截取文件路径

#自定义函数

#!/bin/bash
function sum()
{
        s=0
        s=$[$1+$2]
        echo $s
}

read -p "input param1:" p1
read -p "input param2:" p2
sum $p1 $p2

9 Shell tool

cut,sed,awk,sort

shell

shell脚本就是把一堆操作命令放在一个.sh文件里面,./*.sh执行即可

linux拷贝文件命令

CP命令
格式: CP [选项]  源文件或目录   目的文件或目录
选项说明:-b 同名,备分原来的文件
        -f 强制覆盖同名文件

-r 按递归方式保留原目录结构复制文件!!!!!!