天天看点

【SHELL 编程基础第二部分】SHELL里的流程控制、SHELL里的函数及脚本调试方法!

对于shell书写和概念上一篇已经有所介绍,那么本篇继续学习shell编程一些语法知识;

首先介绍shell中的流程控制,例如判断语句等等…

if语句:

首先了解几个知识:

[ -f “somefile” ] :判断是否是一个文件

[ -x “/bin/ls” ] :判断/bin/ls是否存在并有可执行权限

[ -n “$var” ] :判断$var变量是否有值

[ “$a” = “$b” ] :判断$a和$b是否相等

示例代码:

1

2

3

4

5

6

7

8

9

10

11

#!/bin/sh

varone=1

vartwo=2

varthree=3

if [ "$varone" = "$vartwo" ]; then

    echo "vartwo:$vartwo"

elif [ "$varone" = "$varthree" ]; then

    echo "varthree:$varthree"

else

    echo "varone:$varone"

fi

务必注意,[]比较的时候其括号前后的空格别忘了! = 等号前后也要有空格也要注意;

   && 和 || 操作符:

12

13

14

15

if [ "$varone" = "$varthree" ] || [ "$varone" = "$vartwo" ]; then

    echo "|| 进入"

    echo "no || 进入"

if [ "$varone" = "$varone" ] && [ "$varone" = "$vartwo" ]; then

    echo "&& 进入"

    echo "no && 进入"

 case 语句:

须知:

case表达式可以用来匹配一个给定的字符串,而不是数字(可别和c语言里的switch…case混淆)。

    示例代码:

ftype=`file "$1"`   # note ' and ` is different

case "$ftype" in

"$1: zip archive"*)

unzip "$1" ;;

"$1: gzip compressed"*)

gunzip "$1" ;;

"$1: bzip2 compressed"*)

bunzip2 "$1" ;;

*) echo "file $1 can not be uncompressed with smartzip";;

esac

特殊变量$1,该变量包含有传递给该脚本的第一个参数值,也就是说,$1 就是字符串 articles.zip。

     select 语句:

select表达式是bash的一种扩展应用,擅长于交互式场合。用户可以从一组不同的值中进行选择:

select var in ... ; do

 break;

done

.... now $var can be used ....

echo "what is your favourite os?"

select var in "linux" "gnu hurd" "free bsd" "other"; do

  break;

echo "you have selected $var"

如果 以上脚本运行出现 select :not found 将 #!/bin/sh 改为 #!/bin/bash 该脚本的运行结果如下:

what is your favourite os?

1) linux

2) gnu hurd

3) free bsd

4) other

#? 1

you have selected linux

while/for 循环:

vartwo=1

# while

while [ "$varone" = "$varone" ]; do

    echo "while done"

    break

#  for

for varstr in h i m i ; do

    echo "varstr is $varstr"

输出:

while done

varstr is h

varstr is i

varstr is m

localhost:desktop himi$

select 语句:

须知:select表达式是bash的一种扩展应用,擅长于交互式场合。用户可以从一组不同的值中进行选择:

   示例代码:

echo "what is your favourite?"

select var in "ios" "android" "himi" "other"; do

break;

执行脚本后,等待用户输入,然后在终端输入你的选择,回车,如下显示:

what is your favourite?

1) ios

2) android

3) himi

#? 3

you have selected himi

函数:

如果你写过比较复杂的脚本,就会发现可能在几个地方使用了相同的代码,这时如果用上函数,会方便很多。函数的大致样子如下:

functionname()

{

# inside the body $1 is the first argument given to the function

# $2 the second ...

body

}

himi()

    echo "function is ok"

    exit 0

himi

脚本调试:

最简单的调试方法当然是使用echo命令。你可以在任何怀疑出错的地方用echo打印变量值,这也是大部分shell程序员花费80%的时间用于调试的原因。shell脚本的好处在于无需重新编译,而插入一个echo命令也不需要多少时间。shell也有一个真正的调试模式,如果脚本”strangescript”出错,可以使用如下命令进行调试:

 sh -x strangescript

上述命令会执行该脚本,同时显示所有变量的值。shell还有一个不执行脚本只检查语法的模式,命令如下:

sh -n your_script    

ok,本章主要是为了熟悉一些控制语句和常用知识点,那么到这对于shell编程基础学习认识就算告一段落,如有必要以后会继续深入学习;暂时足以;

继续阅读