本站文章均为 李华明Himi 原创,转载务必在明显处注明:

转载自【黑米GameDev街区】 原文链接: http://www.himigame.com/shell/764.html

          ☞ 点击订阅 ☜
 本博客最新动态!及时将最新博文通知您!

 

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

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

if语句:

首先了解几个知识:

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

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

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

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

示例代码:

 

   
   
   
   
  1. #!/bin/sh 
  2. varOne=1 
  3. varTwo=2 
  4. varThree=3 
  5. if [ "$varOne" = "$varTwo" ]; then 
  6.     echo "varTwo:$varTwo" 
  7. elif [ "$varOne" = "$varThree" ]; then 
  8.     echo "varThree:$varThree" 
  9. else 
  10.     echo "varOne:$varOne" 
  11. fi 

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

   && 和 || 操作符:

示例代码:

 

    
    
    
    
  1. #!/bin/sh 
  2. varOne=1 
  3. varTwo=2 
  4. varThree=3 
  5. if [ "$varOne" = "$varThree" ] || [ "$varOne" = "$varTwo" ]; then 
  6.     echo "|| 进入" 
  7. else 
  8.     echo "No || 进入" 
  9. fi 
  10.   
  11. if [ "$varOne" = "$varOne" ] && [ "$varOne" = "$varTwo" ]; then 
  12.     echo "&& 进入" 
  13. else 
  14.     echo "No && 进入" 
  15. fi 

case 语句:

须知:

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

    示例代码:

 

    
    
    
    
  1. #!/bin/sh 
  2.   
  3. ftype=`file "$1"`   # Note ' and ` is different 
  4. case "$ftype" in 
  5. "$1: Zip archive"*) 
  6. unzip "$1" ;; 
  7. "$1: gzip compressed"*) 
  8. gunzip "$1" ;; 
  9. "$1: bzip2 compressed"*) 
  10. bunzip2 "$1" ;; 
  11. *) echo "File $1 can not be uncompressed with smartzip";; 
  12. esac 

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

     select 语句:

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

 

    
    
    
    
  1. select var in ... ; do 
  2.  break
  3. done 
  4. .... now $var can be used .... 
示例代码:

 

   
   
   
   
  1. #!/bin/sh 
  2.   
  3. echo "What is your favourite OS?" 
  4. select var in "Linux" "Gnu Hurd" "Free BSD" "Other"do 
  5.   break
  6. done 
  7. echo "You have selected $var" 
如果 以上脚本运行出现 select :NOT FOUND 将 #!/bin/sh 改为 #!/bin/bash 该脚本的运行结果如下:

 

   
   
   
   
  1. What is your favourite OS? 
  2. 1) Linux 
  3. 2) Gnu Hurd 
  4. 3) Free BSD 
  5. 4) Other 
  6. #? 1 
  7. You have selected Linux 

while/for 循环:

示例代码:

 

    
    
    
    
  1. #!/bin/sh 
  2. varOne=1 
  3. varTwo=1 
  4.   
  5. # while 
  6. while [ "$varOne" = "$varOne" ]; do 
  7.     echo "while Done" 
  8.     break 
  9. done 
  10.   
  11. #  for 
  12. for varStr in H I M I ; do 
  13.     echo "varStr is $varStr" 
  14. done 
输出:

 

   
   
   
   
  1. while Done 
  2. varStr is H 
  3. varStr is I 
  4. varStr is M 
  5. varStr is I 
  6. localhost:Desktop Himi$ 

select 语句:

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

   示例代码:

 

    
    
    
    
  1. #!/bin/sh 
  2. echo "What is your favourite?" 
  3. select var in "iOS" "Android" "Himi" "Other"do 
  4. break
  5. done 
  6. echo "You have selected $var" 
执行脚本后,等待用户输入,然后在终端输入你的选择,回车,如下显示:

 

   
   
   
   
  1. What is your favourite? 
  2. 1) iOS 
  3. 2) Android 
  4. 3) Himi 
  5. 4) Other 
  6. #? 3 
  7. You have selected Himi 
  8. localhost:Desktop Himi$ 

函数:

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

 

    
    
    
    
  1. functionname() 
  2. # inside the body $1 is the first argument given to the function 
  3. # $2 the second ... 
  4. body 
示例代码:

 

   
   
   
   
  1. #!/bin/sh 
  2. himi() 
  3.     echo "Function is ok" 
  4.     exit 0 
  5. himi 

脚本调试:

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

 sh -x strangescript

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

sh -n your_script    

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