shell学习杂记(-)
单引号可以屏蔽任何特殊字符双引号可以屏蔽$ 反斜杠\ 反引号`以外的任何特殊字符
\反斜杠屏蔽任何紧跟其后的单个特殊字符,等于在单个字符上加上单引号
$#传递给脚本的参数个数
$0正在执行的命令的名字
命令若被成功执行,返回的状态码总是0,反之则为非零值,当脚本读到exit就会无条件退出,若exit不指定状态码就会默认采用上一个命令执行后返回的状态码
case只执行其中符合条件的其中之一,执行完之后跳出,每个分支后面都有两个分号,只有最后一个分支后面的分号可以省略。
case value in
va1 ) command
…
command ;;
va2 ) command
…
Command ;;
…
van ) command
…
Command ;;
esac
字符串比较
[ string1 = string2 ] string1和string2相同
[ string1 != string2 ] string1和string2不相同
[ -n string ] string不为空
[ -z string ] string为空
整数比较
[ int1 –eq int2 ] int1等于int2
[ int1 –ne int2 ] int1不等于int2
[ int1 –gt int2 ] int1大于int2
[ int1 –ge int2 ] int1大于等于int2
[ int1 –lt int2 ] int1小于int2
[ int –le int2 ] int1小于等于int2
文件判断
[ -e file ] file存在
[ -d file ] file为目录
[ -f file ] file为普通文件
[ -r file ] file可读
[ -w file ] file可写
[ -x file ] file可执行
[ -s file ] file内容不为空
[ -L file] file为符号链接
逻辑操作符
[ express1 –a express2 ] 条件1和条件2同时满足
[ express1 –o express2 ] 条件1和条件2至少有一个满足
[ !express1 ] 条件1不满足
if test xxx=if
for循环用来将一组命令循环执行预先确定的遍数,基本格式如下:
for var in word1 word2 … wordn
do
command
command
…
done
首先将word1的值给变量var执行,之后是word2...in之后有几个值就循环几次
for的另外一种形式
for ((i=1;i/dev/null屏蔽输出
>/dev/null 2>&1这条命令将标准输出和错误输出都重定向到了控设备文件中,也就是都丢弃了,0-标准输入,1-标准输出,2-标准错误输出
awk '{print NR,NF,$1,$NF,}' file 显示文件file的当前记录号、域数和每一行的第一个和最后一个域。
shell命令的执行顺序
1. 命令A && 命令B
如果命令A执行成功则接下来执行命令B 否则B不会执行
2. 命令A || 命令B
如果命令A执行失败则接下来执行命令B,否则B不会执行
用()和{ }将命令结合在一起
(命令1;命令2;. . .)
在当前shell中执行一组命令
{命令1;命令2;. . .}
在子shell中执行一组命令
Ex
$ cp> 3.组合使用一般为A && B || C
注意这两个例子:
ls /tmp/abc && echo "exist" || echo "no exist"
ls /tmp/abc || echo "no exist" && echo "exist"
上面第一个是正确的,第二个有问题,为什么?注意&&和||是看$?返回的状态码来决定下一个命令是否执行的。
页:
[1]