【Shell 编程基础第二部分】Shell里的流程控制\函数及\脚本调试-阿里云开发者社区

开发者社区> 余二五> 正文

【Shell 编程基础第二部分】Shell里的流程控制\函数及\脚本调试

简介:
+关注继续查看

对于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编程基础学习认识就算告一段落,如有必要以后会继续深入学习;暂时足以;










本文转自 xiaominghimi 51CTO博客,原文链接:http://blog.51cto.com/xiaominghimi/908879,如需转载请自行联系原作者

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
Windows Internet编程基础--WinInet
假如对 dwContext 参数使用了默认值,将不能区分指示 FTP 连接进度的 OnStatusCallback 调用和指示 HTTP 连接进度的调用。如果指定以后可在 OnStatusCallback 中测试的 dwContext ID,您将知道是哪个操作生成的回调
1048 0
Java编程基础阶段笔记 day 07 面向对象编程(上)
面向对象编程笔记Notes:面向对象三条学习主线、面向过程 VS 面向对象、类和对象、创建对象例子、面向对象的内存分析
585 0
12.Linux shell编程(脚本传参)
(创建于2018/1/31) 1.传递参数 Press ENTER or type command to continue #!/bin/bash ...
849 0
性能测试脚本的编写和调试
性能测试是一个入门简单,但是精通难,很依赖实践经验的技术活。如何编写压测脚本只是小术,而如何快速找到问题的原因,压出瓶颈却是大有学问。这次,云享团的专家从“术”入手,对一个自己临时写的的一个网站进行压测,希望能帮大家更好理解性能测试产品,特别是脚本编写的部分。
7450 0
SAS学习笔记之《SAS编程与数据挖掘商业案例》(4)DATA步循环与控制、常用全程语句、输出控制
SAS学习笔记之《SAS编程与数据挖掘商业案例》(4)DATA步循环与控制、常用全程语句、输出控制 1. 各种循环与控制 DO组 创建一个执行语句块 DO循环 根据下标变量重复执行DO和END之间的语句 DO WHILE 重复执行直到条件为假则退出循环 DO UNTIL 重复执行直到条件为真则退出循环 DO OVER 对隐含下标
1257 0
Python基础之:Python中的流程控制
流程控制无非就是if else之类的控制语句,今天我们来看一下Python中的流程控制会有什么不太一样的地方。
171 0
+关注
20382
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载