linux note day06(shell脚本、条件判断、流程控制)

本文详细介绍了Shell脚本的基础知识,包括脚本的组成、执行方式、参数接收以及常用测试语句。通过实例展示了如何进行文件测试、逻辑测试、整数及字符串比较,并探讨了流程控制语句如if条件判断、for和while循环的应用。此外,还讲解了case判断语句的使用。文章适合初学者了解和学习Shell脚本编程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

shell脚本

        简单说shell脚本是为了实现某业务功能的linux命令的集合,shell脚本文件就是存放这些Linux命令集合的文件,为了与普通文件进行区分,shell脚本文件一般使用.sh结尾;执行shell脚本有2种方式,可以通过bash xx.sh或者在命令行中直接输入shell脚本文件的绝对路径来执行脚本。

        shell脚本内容的格式是固定的,如下是打印当前目录列表的简单shell脚本,这个shell脚本主要包含三部分,第一行(#!)是声明使用哪种解释器来执行shell脚本;第二行(#)是注释信息,从第三行开始就是linux命令集合了,用于实现业务功能。

#!/bin/bash 
#For Example 
pwd 
ls -al

 shell脚本接收参数

$* :接收到的参数都有哪些
$# :接收参数的个数
$0 :shell脚本名称
$1、$2、$3 :第1、2、3个参数

使用测试语句判断用户输入的参数

        测试语句主要用于判断用户输入的参数,这里虽然也使用中括号,但跟通配符的中括号是两码事儿,判断语句里的中括号格式要求比较严格,语句两边必须使用空格;返回结果使用变量$?进行查看,返回值0表示条件为真,非0表示条件为假:

第4章 Vim编辑器与Shell命令脚本第4章 Vim编辑器与Shell命令脚本

         根据判断对象的不同,测试语句可以分为4种

文件测试语句;
逻辑测试语句;
整数值比较语句;
字符串比较语句。

文件测试语句

        主要用于测试某文件是否存在、类型是目录还普通文件、rwx权限这些

 逻辑测试语句

        每次使用变量$?查看测试语句返回值太麻烦了,可使用逻辑符号将返回结果做一个简单的判断直接进行输出

&&	前面命令执行成功,则执行后面的语句
||	前面命令执行失败,则执行后面的语句
!	取反

用例:判断当前用户是管理员还是普通用户

 整数值比较语句

        对整数进行比较时就要注意了,这里必须使用转义符号,因为>、<、=分别会与输出重定向、输入重定向、赋值符发生冲突

用例:内存小于10MB时发送报警消息

        使用free查看内存情况

        使用grep搜索内存行

        使用awk结合正则提取内存列,此处不使用cut是因为free执行结果中无法确认列的分隔符是什么

可以使用整数测试语句、逻辑测试语句进行优化

字符串判断语句

  

 用例:判断某个变量是否被使用了,避免覆盖其他用户的变量

        -z :字符串比较,判断变量值(字符串)是否为空值 

流程控制语句

      在shell中输入的命令一般是按照由上到下的顺序依次运行,当然在使用逻辑符进行条件判断时实现了简单的真假条件分支,其实在linux中还提供了编程语言中对应的if条件判断、for条件循环、while条件循环、case条件语句,实现的功能与编程语言是一样的,但在shell中的格式与编程语言还是有很大区别的

条件测试if

        支持单分支、双分支、多分支

单分支格式

用例:判断指定目录是否存在,如不存在则创建该目录 

双分支格式

 用例:ping某地址是否在线

扩展:黑洞文件/dev/null,可以将不想显示在屏幕的信息导入到/dev/null文件里面

多分支

用例:判断成绩等级

扩展:实现交互式输入参数,使用read命令实现交互式时将用户输入值赋值给某变量,使用参数-p在交互过程中显示提示信息

循环for

        根据范围进行循环

 用例:批量创建多个用户,用户名称存储在user.txt里面

扩展:声明变量时不需要符号$,使用变量值的时候需要使用符号$

        shell中的变量不需要声明,直接拿来使用

        passwd命令的--stdin参数,用于接收管道符传递的参数作为passwd的密码参数

用例:批量判断ip是否在线,ip保存在ip.txt里面

循环while

        根据条件循环

用例:猜价格

扩展:$RANDOM:随机数

        expr :计算公式,因为在shell中是不区分变量的数据类型的,比如在shell中出现512,bash并不清楚这是数字还是字符串,使用expr命令达到表达式计算的目的;

        let TIMES++ :let命令在此处的作用类似于编程语言中的 i++,此处可以直接写TIMES=`expr $TIMES + 1`

        exit :表示退出循环还是程序?

用例:exit 0 表示退出程序,而不只是退出循环

运行结果

case判断语句

        case与多分支if判断非常类似,case格式要求与编程语言中的switch case格式区别太大了(吐槽吐槽!)

        格式要求:判断条件只有右括号,没有左括号

        格式要求:每个判断结束条件需要使用双分号结束,但最后一个判断条件后边却没有双分号

        在case中的条件或并不是符号"||"而是"|"

用例:判断数据的类型

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值