• 文件测试(单目):

  • -e file:测试文件是否存在  -f file:测试文件是否为普通文件  -d file:测试文件是否为目录  -r file:测试当前用户对指定文件是否有读取权限  -w file:测试当前用户对指定文件是否有写入权限  -x file:测试当前用户对指定文件是否有执行的权限

  • 多分支的if语句:

  • if 判断条件; then

  • statement1

  • elif 判断条件2; then

  • statement2

  • elif 判断条件3; then

  • statement3

  • else

  • statement4

  • fi

  • 测试脚本是否有语法错误:

  • bash -n 脚本   bash -x 脚本(单步执行)

  • 位置变量:$1 $2 $3

  • 例:bash w.sh /etc/passwd /etc/fstab  脚本中 $1 :就表示为/etc/passwd  $2 :就表示为/etc/fstab

  • shift:轮替 (位置变量用过一次后就会踢出)  shift n(数字):可以跳n个位置

  • echo "$1"

  • shift

  • echo "$1"

  • shift 2

  • echo "$1"

  • 特殊变量:$?  $#(显示参数个数)  $*(显示参数列表)  $@(显示参数列表)

  • 例:if [ $# -lt 0 ]; then

  • 注: exit 返回码(错误):退出脚本 ,定义脚本退出状态码,如果脚本设有明确定义,退出状态码那么就时最后执行的一条命令的退出码,即为脚本的退出状态码。

  • sed基本用法:stream editor行编辑器,

  • -n:静默模式(不再默认显示模式空间的内容)  -i:修改源文件(一般不使用)  -e script -e script..:可以同时执行多个脚本  -f /path/to/sed_script: 使用正则表达式

  • sed是在一段内存空间(模式空间)中处理文件的,所以不会直接编辑源文件,然而,处理结束后,将模式空间的内容打印到屏幕上(所以有时候显示为重复的两行)

  • sed  address(地址)  command  file...

  • Address:

  • 1.startline,endline

  • 2./pattern(regexp)/

  • 3. /pattern1/,/pattern2/(第一次被1匹配到的行至第一次被2匹配到的行结束,中间的所有行)

  • 4.linenumber:指定的行,$:最后一行  $-1:倒数第二行

  • 5.startline,+n:从startline开始,向后的n行;

  • Commad:

  • d:删除符合条件的行(例:sed ‘1,2d’(双引号为变量引用)/etc/fstab)   p:显示符合条件的行  a\string:在指定的行后面追加新行(例:‘/^\//a \#....’/etc/passwd或/^\//a \#...\n...)  i \string: 在 指定的行前面追加新行   r file:将指定的文件的内容添加至符合条件的行出(例:sed ‘2r /etc/fstab’/etc/passwd)  w file: 将指定范围内的内容另存至指定的文件中(例:‘/root/w /etc/passwd’/etc/fstab)

  • s :查找并替换 s/pattern/string/ (例:s/^\//#/ /etc/passwd)默认只替换每行中第一次匹配到的字符串,加修饰符:g(全屏替换s///g)  i:忽略大小写 。(s除了///还可以使用###  @@@ 等...)  &:引用模式匹配整个串(sed 's#/r..t/#&r#g' /etc/passwd) 也支持后向引用 (sed ‘s#\(r..t\)#\1r#g’ /etc/passwd)  (只改变单个首字母:sed ‘s#r(..t\)#R\1#g’ /etc/passwd)  在4到末行的每行前面加eee:sed ‘4,$s/^.*/eee&/’***(若&eee则在每行后面添加eee)

  • 字符测试:

  • ==(或=) :比较,相等为真,不等为假 :[$A = $B]  != : 不等为真,相等为假  >  < >=  <=  -n string:测试指定字符串是否为空,空则真,不空则假  -z string:测试指定字符串是否为空,空则假,不空则真

  • for循环:进入条件,退出条件

  • for 变量 in 列表;do

  • 循环体

  • done

  • 生成列表;{1..100}

  • seq 10 : 1--10   seq 5 10: 5--10  seq2 2 10: 2 4 6 8 10  seq 1 2 10: 1 3 5 7 9

  • seq : 起始数  步进长度  结束数

  • declare -n(声明变量类型) Num=0   -x :环境变量

  • 例:LINE=`wc -l /etc/passwd | cut -d‘ ’ -f1`

  • for I in `seq | $LINE`; do

  • echo "###,`head -n $I /etc/passwd | tail -1 |cut -d: -f1`";done