shell学习杂记(-)
2011-02-10 16:14
274 查看
单引号可以屏蔽任何特殊字符
双引号可以屏蔽$ 反斜杠\ 反引号`以外的任何特殊字符
\反斜杠屏蔽任何紧跟其后的单个特殊字符,等于在单个字符上加上单引号
$#传递给脚本的参数个数
$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 [xxx]
for循环用来将一组命令循环执行预先确定的遍数,基本格式如下:
for var in word1 word2 … wordn
do
command
command
…
done
首先将word1的值给变量var执行,之后是word2...in之后有几个值就循环几次
for的另外一种形式
for ((i=1;i<10;i++))
do
echo $i
done (())是固定格式
for是执行循环,if是执行判断,while则是两者的集合,先判断后执行循环,until则正好相反,判断结果为否则往下执行
awk '{pattern + action}' {filenames}
对于awk来说整个文件就是一个记录,用$0表示,每一列用$1,$2..表示,模式匹配写在//中,需要替换的内容写在" "中,awk '{ sub(/test/, "mytest"); print }' testfile
sub对行进行操作,gsub对整个文档进行操作。把每个单词当作一个域,默认把空格和Tab作为域分隔符,可以使用-F:参数把默认的域分隔符转为冒号
查找多个模式匹配类似于awk '/AL|IN/' emp_names
脚本中使用:表示空命令,>/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 idoi1.txt idoi2.txt || (echo “if you see this then cp failed”| mail root; exit)
3.组合使用一般为A && B || C
注意这两个例子:
ls /tmp/abc && echo "exist" || echo "no exist"
ls /tmp/abc || echo "no exist" && echo "exist"
上面第一个是正确的,第二个有问题,为什么?注意&&和||是看$?返回的状态码来决定下一个命令是否执行的。
本文出自 “成长全记录” 博客,请务必保留此出处http://lymrg.blog.51cto.com/1551327/490552
双引号可以屏蔽$ 反斜杠\ 反引号`以外的任何特殊字符
\反斜杠屏蔽任何紧跟其后的单个特殊字符,等于在单个字符上加上单引号
$#传递给脚本的参数个数
$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 [xxx]
for循环用来将一组命令循环执行预先确定的遍数,基本格式如下:
for var in word1 word2 … wordn
do
command
command
…
done
首先将word1的值给变量var执行,之后是word2...in之后有几个值就循环几次
for的另外一种形式
for ((i=1;i<10;i++))
do
echo $i
done (())是固定格式
for是执行循环,if是执行判断,while则是两者的集合,先判断后执行循环,until则正好相反,判断结果为否则往下执行
awk '{pattern + action}' {filenames}
对于awk来说整个文件就是一个记录,用$0表示,每一列用$1,$2..表示,模式匹配写在//中,需要替换的内容写在" "中,awk '{ sub(/test/, "mytest"); print }' testfile
sub对行进行操作,gsub对整个文档进行操作。把每个单词当作一个域,默认把空格和Tab作为域分隔符,可以使用-F:参数把默认的域分隔符转为冒号
查找多个模式匹配类似于awk '/AL|IN/' emp_names
脚本中使用:表示空命令,>/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 idoi1.txt idoi2.txt || (echo “if you see this then cp failed”| mail root; exit)
3.组合使用一般为A && B || C
注意这两个例子:
ls /tmp/abc && echo "exist" || echo "no exist"
ls /tmp/abc || echo "no exist" && echo "exist"
上面第一个是正确的,第二个有问题,为什么?注意&&和||是看$?返回的状态码来决定下一个命令是否执行的。
本文出自 “成长全记录” 博客,请务必保留此出处http://lymrg.blog.51cto.com/1551327/490552
相关文章推荐
- shell 学习杂记一
- Shell 学习杂记二
- Shell学习杂记一
- shell学习杂记(二)
- shell 学习杂记
- android adb shell and monkey 学习记录
- Shell脚本学习之控制语句
- Shell 学习笔记(三) 重定向
- Bash Shell 学习记录(一)
- 学习日记之shell通配符
- Shell脚本学习笔记
- shell学习1
- shell脚本学习第三天——特殊变量
- shell脚本学习-11(cut命令学习)
- shell学习5
- Shell 学习10 - Shell 注释
- shell脚本学习笔记
- 学习Shell脚本(第四天)
- shell学习指南-知识点总结
- shell 学习(1) 执行,管道,重定向,逻辑分隔,变量,引号,运算