shell脚本语法

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 
#Bash Shell

你可能感兴趣的:(shell脚本语法)