[] [[ ]] -n -z
-n:判断字符串是否非空,为空返回1,为false,非空返回0,为true。
-z:判断字符串是否为空,为空返回0,为true,非空返回1,为false。
[]: 内部变量需要加双引号1
2
3
4
5pid="123"
[-z "$pid"]
[5 -lt 3] || [3 -gt 2]
[5 -lt 4] && [3 -gt 4]
[5 -le 5] && [3 -eq 3]
文件测试
1 | -e 文件名| 如果文件存在则为真 |
1 | -a :与 |
例:1
2
3
4
5
6if test -e ./File1 -o -e ./File2
then
echo '至少有一个文件存在'
else
echo '两个文件都不存在'
fi
函数
1 |
|
输出:1
2
3
4
5
6
7这个函数会对输入的两个数字进行相加运算...
输入第一个数字:
1
输入第二个数字:
2
两个数字分别为 1 和 2 !
输入的两个数字之和为 3 !
参数
1 | $# 传递到脚本的参数个数 |
sed
最基本语句
增:a和i1
2
3sed -e 4a\insert-a-line-after-line-4 distance.file
# -e (execute) 可省略
sed -e 4i\insert-a-line-before-line-4 distance.file
删:d1
2
3
4
5
6#删除第二行
sed -e 2d distance.file
cat distance.file | sed '2d'
##删除包含pattern字符串的行
cat distance.file | sed '/pattern/d'
改:c1
2sed -e 1,2c\replace-line1-to-line2-with-this-line distance.file
cat distance.file | sed '1,2c No 1-2 line'
正则替换:s1
2
组合命令:1
2
3
4nl /etc/passwd | sed -n '/root/{s/bash/blueshell/;p;q}'
#搜索/etc/passwd,找到root对应的行,执行后面花括号中的一组命令,每个命令之间用分号分隔,bash替换为blueshell,再输出这行:(如果不加-n其他行也会输出)
nl /etc/passwd | sed -e '3,$d' -e 's/bash/blueshell/g'
字符串替换:s/ / /g1
cat distance.file | sed 's/source-string/replace-string/g'
gawk
语法
1 | gawk options[可省略] program file |
grep
在当前目录递归(r)查找pattern字符串,忽略大小写(i),并输出pattern所在行号(n)1
grep -irn pattern