【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,如需转载请自行联系原作者
目录
相关文章
|
1天前
|
分布式计算 Hadoop Shell
使用shell脚本实现自动SSH互信功能
使用shell脚本实现自动SSH互信功能
10 1
|
2天前
|
Unix Shell Linux
轻松编写 AIX Shell 脚本
轻松编写 AIX Shell 脚本
10 1
|
3天前
|
监控 关系型数据库 Shell
Shell脚本入门:从基础到实践,轻松掌握Shell编程
Shell脚本入门:从基础到实践,轻松掌握Shell编程
|
3天前
|
关系型数据库 MySQL Shell
在Centos7中利用Shell脚本:实现MySQL的数据备份
在Centos7中利用Shell脚本:实现MySQL的数据备份
|
5天前
|
Shell Linux 编译器
C语言,Linux,静态库编写方法,makefile与shell脚本的关系。
总结:C语言在Linux上编写静态库时,通常会使用Makefile来管理编译和链接过程,以及Shell脚本来自动化构建任务。Makefile包含了编译规则和链接信息,而Shell脚本可以调用Makefile以及其他构建工具来构建项目。这种组合可以大大简化编译和构建过程,使代码更易于维护和分发。
22 5
|
5天前
|
Shell 程序员 数据安全/隐私保护
shell 脚本 if-else判断 和流程控制 (基本语法|基础命令)
shell 脚本 if-else判断 和流程控制 (基本语法|基础命令)
|
5天前
|
存储 Shell C语言
shell脚本 编程 变量 基本入门(详解)
shell脚本 编程 变量 基本入门(详解)
|
6天前
|
Shell Linux 编译器
C语言,Linux,静态库编写方法,makefile与shell脚本的关系。
总结:C语言在Linux上编写静态库时,通常会使用Makefile来管理编译和链接过程,以及Shell脚本来自动化构建任务。Makefile包含了编译规则和链接信息,而Shell脚本可以调用Makefile以及其他构建工具来构建项目。这种组合可以大大简化编译和构建过程,使代码更易于维护和分发。
14 3
|
11天前
|
弹性计算 运维 监控
|
7月前
|
Shell
Shell编程:流程控制与高级应用的深入解析
Shell 流程控制 使用Shell编程时,流程控制是非常重要的,它允许你根据条件执行不同的命令或者控制程序的执行流程。Shell支持一些基本的流程控制结构,包括条件语句和循环语句。 1、条件语句 if语句 if [ 条件 ]; then # 如果条件为真执行的命令 elif [ 其他条件 ]; then # 如果其他条件为真执行的命令 else # 如果所有条件都不为真执行的命令 fi 示例: #!/bin/bash read -p "请输入一个数字: " num if [ $num -eq 0 ]; then echo "输入的数字是零" elif [ $n
56 1