- 文件测试(单目):
- -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"
- 特殊变量:$? $#(显示参数个数) $*(显示参数列表) [email protected](显示参数列表)
- 例: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
时间: 2024-11-05 16:03:42