首页 > 系统相关 >【Shell 编程基础第二部分】Shell里的流程控制、Shell里的函数及脚本调试方法!

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

时间:2022-11-25 12:01:09浏览次数:56  
标签:bin Shell 编程 echo sh select 调试 varOne

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


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

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

if语句:

首先了解几个知识:

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

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

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

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

示例代码:


​#!/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​


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

   && 和 || 操作符:

示例代码:


​#!/bin/sh​


​varOne=1​


​varTwo=2​


​varThree=3​


​if​​ ​​[ ​​ ​​"$varOne"​​ ​​= ​​ ​​"$varThree"​​ ​​] || [ ​​ ​​"$varOne"​​ ​​= ​​ ​​"$varTwo"​​ ​​]; ​​ ​​then​


​echo​​ ​​"|| 进入"​


​else​


​echo​​ ​​"No || 进入"​


​fi​


 


​if​​ ​​[ ​​ ​​"$varOne"​​ ​​= ​​ ​​"$varOne"​​ ​​] && [ ​​ ​​"$varOne"​​ ​​= ​​ ​​"$varTwo"​​ ​​]; ​​ ​​then​


​echo​​ ​​"&& 进入"​


​else​


​echo​​ ​​"No && 进入"​


​fi​


 case 语句:

须知:

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

    示例代码:


​#!/bin/sh​


 


​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 ....​


示例代码:


​#!/bin/sh​


 


​echo​​ ​​"What is your favourite OS?"​


​select​​ ​​var ​​ ​​in​​ ​​"Linux"​​ ​​"Gnu Hurd"​​ ​​"Free BSD"​​ ​​"Other"​​ ​​; ​​ ​​do​


​break​​ ​​;​


​done​


​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 循环:

示例代码:


​#!/bin/sh​


​varOne=1​


​varTwo=1​


 


​# while​


​while​​ ​​[ ​​ ​​"$varOne"​​ ​​= ​​ ​​"$varOne"​​ ​​]; ​​ ​​do​


​echo​​ ​​"while Done"​


​break​


​done​


 


​#  for​


​for​​ ​​varStr ​​ ​​in​​ ​​H I M I ; ​​ ​​do​


​echo​​ ​​"varStr is $varStr"​


​done​


输出:


​while​​ ​​Done​


​varStr is H​


​varStr is I​


​varStr is M​


​varStr is I​


​localhost:Desktop Himi$​


select 语句:

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

   示例代码:


​#!/bin/sh​


​echo​​ ​​"What is your favourite?"​


​select​​ ​​var ​​ ​​in​​ ​​"iOS"​​ ​​"Android"​​ ​​"Himi"​​ ​​"Other"​​ ​​; ​​ ​​do​


​break​​ ​​;​


​done​


​echo​​ ​​"You have selected $var"​


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


​What is your favourite?​


​1) iOS​


​2) Android​


​3) Himi​


​4) Other​


​#? 3​


​You have selected Himi​


​localhost:Desktop Himi$​


函数:

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


​functionname()​


​{​


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


​# $2 the second ...​


​body​


​}​


示例代码:


​#!/bin/sh​


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


标签:bin,Shell,编程,echo,sh,select,调试,varOne
From: https://blog.51cto.com/xiaominghimi/5886234

相关文章

  • 【Linux】linux | shell | 获取系统当前时间
    一、说明        1、linux        2、shell脚本二、脚本1)创建脚本文件touch/tmp/get_time.sh2)编辑脚本文件vi/tmp/get_time.sh3)复制内容#!bin/bashtime=$......
  • PoC、Exp、Payload 与 Shellcode的区别
    在这篇文章中将解释渗透中关于PoC、Exp、Payload与Shellcode的区别PoC,全称"ProofofConcept",中文"概念验证",常指一段漏洞证明的代码。Exp,全称"Exploit",中文"利用"......
  • 深入浅出DDD编程
    作者|刘嘿嘿、离夏、立羽导读最近几年,微服务拆分大行其道,在业务越来越复杂的情况下,许多业务纷纷抛弃了传统单体架构,拥抱微服务。但随着微服务的拆分结束,大家又发现了新的......
  • Java并发编程学习13-任务取消(下)
    任务取消(下)《任务取消》由于篇幅较多,拆分了两篇来介绍各种实现取消和中断的机制,以及如何编写任务和服务,使它们能对取消请求做出响应。1.任务限时运行我们知道许多任务......
  • 聊聊异步编程CompletionService的使用
    在日常需求的研发过程中都遇到过需要调用多个服务并将他们的结果进行合并的需求。这种情形又分为多个结果相互不依赖的情况,以及多个调用的结果相互依赖。比如一个首页,需要......
  • 第五十七章 CSP的常见问题 - 如何调试CSP页面?
    第五十七章CSP的常见问题-如何调试CSP页面?如何调试CSP页面?不要用Debug>ViewBreakpoints来设置断点,因为这似乎容易出错。要调试CSP页面,必须检查选项工具>选项>编......
  • 学习《Python编程 从入门到实践》第二、三天
    近期比较忙,宝宝的预产期是12月17日,老婆每天都跟我说准备要生了。所以昨天看了一会就做家务活了,练习完后忘记写日记了。今天给补上。 为什么突然想学编程呢?其实是平常......
  • JS的函数式编程范式
    一、认识函数式编程为什么学习函数式编程?学吧,不学干啥,js太原始了,得接收新事物,就很帅,里面的概念,学的晕乎乎,最直观的感受就是,套娃函数式编程是随着React的流行受到关注的......
  • 在windows系统中搭建python编程环境
    Python环境可以安装在很多不同的系统中,我们python自学网主要考虑到绝大多数学员都是用的是Windows系统,所以就以Windows系统来给大家演示一下python安装的方法,后面也会更新......
  • 第10节-MySQL数据库的编程基础
     10.1、变量、运算符介绍用户变量:使用@开头。【set定义,会话有效】系统变量:使用@@开头。【declare定义,begin..end有效】局部变量:在存储过程中有效。--1、用户变......