小滔哥 发表于 2013-1-31 00:29:21

常用的一些shell笔记

 
一、语法方面注意if /while /for格式
 
1.      if语句 注意if与[]之间的空格;条件表达式前后都有空格
实例
 if [ $# -lt 3 ];then      echo usage: `basename $0` arg1 arg2 arg2      exit 1fiecho $1echo $2echo $3  
2.      while语句 注意while与[]空格;件表达式前后都有空格
实例
while [ $# -ne 0 ]doecho "arg: $1"shiftdone  
3.      for语句
实例
for i in `seq $#`do    echo arg $idone 
二、特殊变量
$0  这个执行文件的名字
$n  这个程序接受的第n个参数值
$*  这个程序的所有参数 “$1$2 …$n”
S#  这个程序接受的参数个数
$$  这个程序的pid
$!  运行在后台的最后一作业任务的pid
$?  上一个执行命令的返回值
$@ 接受的所有参数(每个都作为独立的字符串) “$1” “$2”…”$n”
 
 
三、输入/输出重定向
1.输出重定向
 
echo abc 1>a.txt 
1可以省略,默认标准输出重定向至a.txt
 
 
ls a.txt b.txt c.txt (不存在) 1>exist.txt 2>err.txt  
标准输出至exist.txt,错误输出重定向至err.txt
“>”换成“>>”,则会在文件结尾追加,而不是覆盖掉原来文件的内容。
 
 
ls a.txt b.txt c.txt 2>&-ls a.txt b.txt c.txt   2>/dev/null  将错误信息关闭
 
 
ls a.txt b.txt c.txt 2>&1 
将错误输出绑定至标准输出。
 
2.输入重定向
 
cat > b.txt <a.txt 
输入来自文件a.txt
 
 
cat b.txt <<eof> a> b> eofabc  当输入遇到eof字符串时,输入自动结束
 
四、常用命令/函数
1.test
  test expression  或者   ;expression前后有空格
echo 1..[ "a"="a" ]# 当str1与str2相同时,返回Trueecho $?[ "a"!="b" ]# 当str1与str2不同时,返回Trueecho $?[ "abc" ]# 当str不是空字符时,返回Trueecho $?[ -n "abc" ]# 当str的长度大于0时,返回Trueecho $?[ -z "" ]# 当str的长度是0时,返回Trueecho $? #echo 2...[ 1 -eq 1 ]# 当int1等于int2时,返回Trueecho $?[ 2 -ge 1 ]# 当int1大于/等于int2时,返回Trueecho $?[ 1 -le 2 ]# 当int1小于/等于int2时,返回Trueecho $?[ 2 -gt 1 ]# 当int1大于int2时,返回Trueecho $?[ 2 -ne 1 ]# 当int1不等于int2时,返回Trueecho $? #echo 3...[ -d a.txt ]# 当file是一个目录时,返回 Trueecho $?[ -f a.txt ]# 当file是一个普通文件时,返回 Trueecho $?[ -r a.txt ]# 当file是一个刻读文件时,返回 Trueecho $?[ -s a.txt ]# 当file文件长度大于0时,返回 Trueecho $?[ -w a.txt ]# 当file是一个可写文件时,返回 Trueecho $?[ -x a.txt ]# 当file是一个可执行文件时,返回 Trueecho $? echo 4...![ !1 -eq 2 ] 当expr的值是False时,返回Trueecho $?[ 1 -lt 2 -a2 -gt 1 ]# 当expr1,expr2值同为True时,返回Trueecho $?[ 1 -gt 2 -o2 -gt 1 ]# 当expr1,expr2的值至少有一个为True时,返回Trueecho $?  
 
2.sed
一次处理一行内容
d命令,删除
$ sed '2,$d' example-----删除example文件的第二行到末尾所有行。$ sed '$d' example-----删除example文件的最后一行。$ sed '/test/'d example-----删除example文件所有包含test的行  
S命令,字符串替换。
$ sed 's/test/mytest/g' example-----在整行范围内把test替换为mytest。如果没有g标记,则只有每行第一个匹配的test被替换成mytest。  
 
e选项 ,多点编辑
$ sed -e '1,5d' -e 's/test/check/' example-----(-e)选项允许在同一行里执行多条命令。如例子所示,第一条命令删除1至5行,第二条命令用check替换test。命令的执 行顺序对结果有影响。如果两个命令都是替换命令,那么第一个替换命令将影响第二个替换命令的结果。  
 
 
3.awk
处理列比较方便。
awk '{print NR ":" $0}' example;NR当前行号,$0当前行内容
使用shell变量
var="this is a test";awk 'BEGIN{print "'"$var"'"}'  
export 变量,使用ENVIRON["var"]形式,
wk 'BEGIN{print ENVIRON["var"]}'  
使用-v选项
awk -vnvar="$var" '{print nvar}'  
 
4.bc,浮点数计算
 
echo "scale=5 ;ibase=10;obase=10; 5.0/4.0" | bc1.25000 
Scale 小数部分保留位数,默认0;
Ibase,obase输入的进制模式,默认10进制。
 
页: [1]
查看完整版本: 常用的一些shell笔记