【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,如需转载请自行联系原作者
目录
相关文章
|
4月前
|
Shell
一个用于添加/删除定时任务的shell脚本
一个用于添加/删除定时任务的shell脚本
149 1
|
3月前
|
Shell Linux 测试技术
6种方法打造出色的Shell脚本
6种方法打造出色的Shell脚本
101 2
6种方法打造出色的Shell脚本
|
3月前
|
XML JSON 监控
Shell脚本要点和难点以及具体应用和优缺点介绍
Shell脚本在系统管理和自动化任务中扮演着重要角色。尽管存在调试困难、可读性差等问题,但其简洁高效、易于学习和强大的功能使其在许多场景中不可或缺。通过掌握Shell脚本的基本语法、常用命令和函数,并了解其优缺点,开发者可以编写出高效的脚本来完成各种任务,提高工作效率。希望本文能为您在Shell脚本编写和应用中提供有价值的参考和指导。
122 1
|
3月前
|
Ubuntu Shell 开发工具
ubuntu/debian shell 脚本自动配置 gitea git 仓库
这是一个自动配置 Gitea Git 仓库的 Shell 脚本,支持 Ubuntu 20+ 和 Debian 12+ 系统。脚本会创建必要的目录、下载并安装 Gitea,创建 Gitea 用户和服务,确保 Gitea 在系统启动时自动运行。用户可以选择从官方或小绿叶技术博客下载安装包。
117 2
|
4月前
|
监控 网络协议 Shell
ip和ip网段攻击拦截系统-绿叶结界防火墙系统shell脚本
这是一个名为“小绿叶技术博客扫段攻击拦截系统”的Bash脚本,用于监控和拦截TCP攻击。通过抓取网络数据包监控可疑IP,并利用iptables和firewalld防火墙规则对这些IP进行拦截。同时,该系统能够查询数据库中的白名单,确保合法IP不受影响。此外,它还具备日志记录功能,以便于后续分析和审计。
83 6
|
3月前
|
运维 监控 Shell
深入理解Linux系统下的Shell脚本编程
【10月更文挑战第24天】本文将深入浅出地介绍Linux系统中Shell脚本的基础知识和实用技巧,帮助读者从零开始学习编写Shell脚本。通过本文的学习,你将能够掌握Shell脚本的基本语法、变量使用、流程控制以及函数定义等核心概念,并学会如何将这些知识应用于实际问题解决中。文章还将展示几个实用的Shell脚本例子,以加深对知识点的理解和应用。无论你是运维人员还是软件开发者,这篇文章都将为你提供强大的Linux自动化工具。
|
4月前
|
Shell Linux C语言
Shell 函数
10月更文挑战第4天
35 7
|
4月前
|
Shell
Shell编程(下)
Shell编程(下)
123 1
|
4月前
|
Shell Linux Windows
Shell编程(上)
Shell编程(上)
65 1
|
9月前
|
Shell 索引
shell脚本入门到实战(四)- 数组
shell脚本入门到实战(四)- 数组