1、条件测试:
可以用“test”,也可以用“[”
不同点为,使用“[”必须以“]”参数结尾,注意不是括号的意思
需要注意的是:表达式的返回值为0即为真,为1即为假,这一点和C语言相反
2、常用的比较参数:
-lt:小于(litter)
-le:小于等于(litter,equal)
-gt:大于(greater)
-ge:大于等于(greater,equal)
-eq:等于(equal)
-ne:不等于(not equal)
-d:测试目录是否存在(director)
-n:测试字符串的长度是否非零(number)
-f:测试文件是否存在(file)
-z:测试长度是否为零(zero)
!:逻辑非是否为真
!=:不等于即为真
-a:逻辑与是否为真(and),也可以用“&&”
-o:逻辑或是否为真(or),也可以用“||”
3、小技巧:
“:”此命令永远为真
“read”此命令等待用于输入,存入后面的变量中,例如:read INPUT,“$INPUT”就会有值
“$1”:此变量是一个特殊的变量,意思为其值为表达式的第一个参数
“$0”:此变量表示第0个参数,相当于C语言的argv[0]参数
"$#":这个变量代表所传参数的个数建议,相当于C语言的argc-1
“$@:这个是一个字符串变量,相当于所有的$1,$2,$3,……,可以用于for循环的in后面
”?“:这个是的值为上一个表达式的返回值
”$“:当前shell的进程号
”shift“:此命令可以移动参数
4、case语句:
1、以esac结束
2、分支结束需要“;;”两个分号
3、不要使用break跳出,执行到第一个case满足就会自动跳出
4、case分支的条件需要使用“)”结束
5、case分支的条件可以使用“|”作为或
例如:
echo "Is it morning? Please answer yes or no."
read YES_OR_NO
case "$YES_OR_NO" in
yes|y|Yes|YES) echo "Good Morning!";;
[nN]*) echo "Good Afternoon!";;
*) echo "Sorry, $YES_OR_NO not recognized. Enter yes or no." exit 1;;
esac
exit 0
5、for/do/done语句:
例1:for FRUIT in apple banana pear; do echo "I like $FRUIT";done //列举出了for循环"$FRUIT"的循环制
例2:for FILENAME in chap?; do mv $FILENAME $FILENAME~; done //使用过了“?”通配符
例3:for FILENAME in `ls chap?`; do mv $FILENAME $FILENAME~; done //使用了'ls chap?'的返回值
6、while/do/done语句:
例1:while [ 1 -lt 2 ]; do echo true; done
例2:
COUNTER=1
while [ "$COUNTER" -lt 10 ]; do echo "Here we go again" COUNTER=$(($COUNTER+1)) //这里注意变量只加的写法,如果写成“COUNTER=$COUNTER+1”就把$COUNTER赋值为字符串了done
7、unlit类似于C语言的do while语法
8、函数:
例:
#! /bin/shfoo(){ echo "Function foo is called";}echo "-=start=-"fooecho "-=end=-"1、”{“后面必须跟一个空格2、”}“后面要是不跟空格,则需要使用”;“3、shell中的函数调用不需要使用”()“,直接写名字即可4、函数也可以传参数,也是$0,$1,$2,此变量为局部变量5、函数内也可以跟return,return后面跟数字,就返回此状态值例1:is_directory(){ DIR_NAME=$1 if [ ! -d $DIR_NAME ]; then return 1 //注意flase应该返回1 else return 0 fi}for DIR in "$@"; do //传入的参数 if is_directory "$DIR" then : //什么都不做 else echo "$DIR doesn't exist. Creating it now..." mkdir $DIR > /dev/null 2>&1 if [ $? -ne 0 ]; then echo "Cannot create directory $DIR" exit 1 fi fidone