shell编程
标准的shell脚本包含要素:
- Sha-Bang
- 命令
- chmod u+rx filename
- 执行命令
- bash ./filename.sh
- ./filename.sh
- source ./filename.sh
- .filename.h
1、脚本用法注释,申明脚本运行方式,可以优雅和简化运行步骤
#!/bin/bash
2、
- $*、$@:代表命令行中所有的参数,前者把所有参数看作一个整体,后者对每个参数区分对待。
- $?:最后一次执行命令的返回状态。正确为0错误为1.
3、赋值运算符不能有空格,算术运算符必须有空格
4、条件判断,中括号和条件判断式中间必须有空格
5、if 判断
#!/bin/bash if [ $1 -eq 1 ] then echo "hello shell!" elif [ $1 -eq 2 ] then echo "hate shell" fi
6、case语句
#!/bin/bash case $1 in 1) echo "nihao" ;; 2) echo "hello" ;; *) echo "gun" ;; esac
7、for循环
#!/bin/bash s=0 for((i=1;i<=100;i++ )) do s=$[$s+$i] done echo $s
8、while循环
#!/bin/bash s=0 i=0 while [ $i -le 100 ] do s=$[$s + $i] i=$[$i + 1] done echo $s
9、切割文件的第一列:
cut -d "" -f 1 filename.txt
10、cut
一、切割cut.txt第一列
cut -d " " -f 1 cut.txt
二、在文件cut.txt中切割出shen
cat cut.txt | grep shen | cut -d " " -f 1
11、sed
(以文件sed.txt为例)
一、将“ ni hao”这个单词插入到sed.txt第二行下,打印。
sed "2a ni hao" sed.txt
二、删除sed.txt文件所有包含wo的行
sed '/wo/d' sed.txt
三、将sed.txt文件中wo替换为ni
sed "s/wo/ni/g" sed.txt
四、将sed.txt文件中的第二行删除并将wo替换为ni
sed -e "2d" -e "s/wo/ni/g" sed.txt
12、awk
awk[选项参数] 'pattern1{action1} pattern2{action2}...' filename pattern:表示awk在数据中查找的内容,就是匹配模式 action:找到匹配内容时所执行的一系列命令
一、搜索passwd文件以root关键字开头的所有行,并输出该行的第7列
awk -F: '/^root/{print $7}' passwd
二、搜索passwd文件以root关键字开头的所有行,并输出该行的第1列和第7列。中间以“,”隔开
awk -F: '/^root/{print $1","$7}' passwd
三、只显示passwd的第1列和第7列,以逗号分割,且在所有行前面添加列名user,shell在最后一行添加“gg,bin/haoya”
awk -F: 'BEGIN{print "user,shell"} {print $1","$7} END{print "gg,bin/haoya"}' pass
四、统计passwd的文件名,每行的行号,每行的列数
awk -F : '{print FILENAME "," NR"," NF}' passwd
五、查询sed.txt中空行所在的行号
awk '/^$/{print NR}' sed.txt
13、sort
作用:将文件进行排序,并将排序结果标准输出
按照“:”分割后的第三列倒序排序 -t:设置排序时所用的分隔字符 -n:依照数值的大小排序 -r:以相反的顺序来排序 -k:指定需要排序的列
sort -t : -nrk 3 sed.txt
*练习:
找出当前文件夹(/home)下所有的文本文件内容中包含有字符"shen"的文件名称
grep -r "shen" /home | cut -d ":" -f 1