Shell脚本条件语句

1.条件测试

文件测试与整数测试

test命令     测试表达式是否成立,若成立返回0,不成立返回其他数值

格式1:test  条件表达式
格式2:[  条件表达式  ]

测试 是否成功使用 $?  

操作符:
-d:测试是否为目录(Directory)
-e:测试目录或文件是否存在(Exist)
-a:测试目录或文件是否存在(Exist)   
-f:测试是否为文件(File)
-r:测试当前用户是否有权限读取(Read)
-w:测试当前用户是否有权限写入(Write)
-x:测试当前用户是否有权限执行(eXcute)
-L: 测试是否为软连接文件

可以通过help  test 进行查看

 

判断是否有读取权限,不是看文件本身,而是看实际结果

比如/etc/shadow文件,它本身是所有人都没有任何权限的,但是,作为root用户,可以无视该权限,直接读取

但是执行权限比较特殊,如果属主,属组,其它用户任何一方有执行权限,那么超级用户就会有执行权限,如果所有人都没有,那么,超级用户也没有

 a 和 e  的区别 ,建议使用e选项

2.

整数值比较

格式:[ 整数1 操作符 整数2 ]

-eq:第一个数等于(Equal)第二个数

-ne:第一个数不等于(Not Equal)第二个数

-gt:第一个数大于(Greater Than)第二个数

-lt:第一个数小于(Lesser Than)第二个数

-le:第一个数小于或等于(Lesser or Equal)第二个数

-ge:第一个数大于或等于(Greater or Equal)第二个数

 应用:监控磁盘空间的大小触发警报

手动将它添加一些文件:dd if=/dev/zero of=/boot/bigfile

然后再去执行这个脚本

 也可以指定将信息发送位置

mail -s :表示指定邮箱

test:邮件名称

 

3. 逻辑测试(短路运算)

格式1:[ 表达式1 ] 操作符 [ 表达式2 ] ...

格式2:命令1 操作符 命令2 ...

操作符作用
&&逻辑的与,"而且"的意思。
||逻辑的或,"或者"的意思。
逻辑的否。

 符号&&

代表逻辑上的”与“,当前面的命令执行成功才会执行后面的命令,判断/dev/cdrom 设备是否存在,若存在则输出exist

 符号||

| | 是命令行级别的逻辑运算符,用于连接两个命令,如果第一个命令执行后返回非零退出状态(即失败),则执行第二个命令。如果执行成功(即其退出状态码为0),则第二个命令不会被执行

  短路与&& 短路或||

 

两个符号一般都是连续使用

$USER是一个变量,显示当前用户名
 
[root@localhost data]#[ $USER = root ]&&echo "yes" || echo "no"
yes
 
如果当前用户名等于root则执行&&符号后面的命令打印yes
如果不等于则执行||后面的命令打印no
因为前两个命令都成功了,所以不会执行||后面的命令
 
[root@localhost data]#[ $USER! = root ]&&echo "yes" || echo "no"
no
 
如果当前用户名不等于root则执行&&符号后面的命令打印yes
如果等于则执行||后面的命令打印no
因为第一个命令是错误的,当前用户等于root,!否定之后,就不等于root
所以第二个命令也不会执行,就会执行||后面的命令

4.字符串比较

格式1:[ 字符串1 = 字符串2 ][ 字符串1 != 字符串2 ](这里的!表示取反的意思)格式2:[ -z 字符串 ]

常用的测试操作符

操作符含义
=字符串内容相同
!=字符串内容不同
-z字符串内容为空

 

5. if语句

if单分支语句

格式:
if   条件测试操作
then  命令顺序
fi

 

 

 

 

     if单分支语句与$$效果一致
     如果if后面的条件测试成立则执行then后的命令如果不成立则直接结束判断
     [表达式1]&&[表达式2]
     如果表达式1成立则执行表达式2如果不成立则不会执行

if双分支语句

格式:
if   条件测试操作
then  命令顺序1
else 命令顺序2
fi分支语句

 例子1

例子2 

 

if双分支语句与&& || 效果一致
如果if后面的条件成立则执行then后命令如果不成立则执行else后命令
[表达式1] $$ [表达式2] || [表达式3]
如果表达式1成立则执行表达式2如果不成立则执行表达式3

 if多分支语句

格式:
if   条件测试操作1
then  命令序列1
elif 条件测试操作2
then命令序列2
else命令序列3
fi分支语句

 

示例1:判断分数范围,分出优秀、合格、不合格三档

(上面第5行GREDE改GRADE)

示例2:判断当前时间输出不同问好 

 

 6.case语句

基本语法如下:

1  case $变量名 in
2  模式1)         # 判断条件
3    命令1...     # 判断为该模式后需要执行的命令
4    ;;
5  模式2)
6    命令2...
7    ;;
8  模式3|模式4)  # 可以用'|'分隔多个模式进行联合匹配
9    命令3...
10    ;;
11  *)
12    default_commands...  # 匹配所有未明确列出的其他情况(可选)
13    ;;
14  esac                   # 内容的结尾格式,与if语句中的fi类似

注意点:

     case行首必须以单词“in”,每一模式必须以单个右括号")"结束

     双分号";;"表示命令序列的结束

     模式字符串中,可以用方括号表示一个连续的范围,如"[0-9]";还可以使用竖杠|表示或。

     最后的*)表示默认模式,其中的 * 表示其他

示例:判断分数范围,分出超级棒、优秀、合格、不合格四档

 

7.循环语句

在Shell脚本中,有多种类型的循环结构,包括 for、while 和 until 循环。

循环的含义是:将某串码段重复多次利用

for:已知次数的情况下

while、unlie:未知次数的情况下

for语句

for条件语句会先读取多个不同的变量值,然后逐一执行同一组命令

其执行过程为:

基本语法为:上下两种都可以

1 for 变量名 in 取值列表 ;do

2 命令序列

3 done

1 for 变量名 in 取值列表

2 do

3 命令序列

4 done

示例1:批量创建用户

首先建立一个文件,在里面添加用户名

现在来写一个脚本

批量删除用户将useradd改为userdel  -r

 

示例2:算数累加,求1-100的和

 

for还有另外一种或用法。可以使用help for进行查看

 

这种语法,偏向C语言类的风格

 
  1. for ((表达式1;表达式2;表达式3))

  2. do

  3. 命令序列

  4. done

  5. 表达式1:定义变量并赋初值

  6. #表达式2:决定是否循环,正确则循环,不正确直接退出

  7. #表达式3:决定循环变量如何改变,决定循环什么时候退出

我们使用这一种方法进行算数累加


sum=0                     #赋予sum变量最初值
for  ((i=0;i<=100;i++))
#i=0:变量初始值,先决条件
#i<=100:判断条件;i小于等于100,如果不正确,直接退出
#i++:变量自身+1
#这条信息的意思是,每次调取这个变量时,都会迭代生成新的+1数值,一直到100结束
do
sum=$[sum+i]  #在每次循环中,将当前数值i加到变量sum上
done
echo  $sum

++ 自身变量+1
--  自身变量-1
+=5 自身变量+5
-=5 自身变量-5
*=5自身变量*5
/=5自身变量/5
%=5  自身变量%5

while语句

while 条件语句用于重复测试某个条件,当条件成立时则继续重复执行

语法结构

  1. while 判断条件

  2. do

  3. 命令1

  4. done

  5. #语法与if相似

 while循环一般用于有条件判断的循环,若判断条件为真,则进入循环,当条件为假就跳出循环

死循环

while 死循环是指一个 while 循环结构,其条件始终为真,导致循环体内的命令会无限重复执行,除非外部干预(如通过 Ctrl+C 终止程序或在循环体内使用 break、exit等语句跳出循环)

示例

批量添加用户,用户名称以user开头

按数字顺序进行编号一共添加10个用户,即user1、user2、user10

初始密码均设为123123

u=1
#初始值
while  [ $u -le 10 ]
#条件为真时,会一直循环执行,当变量u大于10时,会结束循环
do
 
useradd  user$u
 
echo "123123"|passwd --stdin user$u  &>>/dev/null
 
let  u++
#每循环一次,变量u的值就会加1,当循环加到11时,while的判断条件为假
done

执行一下脚本看看结果

 

until语句

until 循环与 while 循环类似,while 循环能实现的脚本 until 同样也可以实现,但区别是while 循环在条件为真是继续执行循环,而 until 则是在条件为假时执行循环

8.双重循环和跳出循环 

break跳出单个循环 break n 数字数字是几代表跳出n层循环

 

我们再做一个实验

 

当$i=5时,会跳出第一次循环,echo “------”命令还会执行

 

 continue终止某次循环中的命令,但是不会完全终止命令

9.

echo的用法

选项作用
\r光标移至行首,并且不换行
\s当前shell的名称,如bash
\t插入Tab键,制表符
\n输出换行
\f换行,但光标仍停留在原处
\表示插入"\"本身转义
\b表示退格 不显示前一个字符
\c抑制更多的输出或不换行

 99乘法表

# 外层循环变量j从1递增到9
for j in {1..9}
do
    # 内层循环变量i从1递增到当前的j值
    for i in `seq $j`
    do
        # 使用echo命令结合-e选项启用转义序列,并用\t插入制表符进行对齐
        # \c表示不换行,使得同一行内可以连续输出多个结果
        echo -e "${i}x${j}=$[i*j] \t\c"
    done
    # 当内层循环结束时(即完成一行输出后),执行一次换行
    echo
done

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/688535.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【计算机网络】P2P应用

将会在两个例子中得出结果 1&#xff0c;对等文件分发 &#xff1b;2&#xff0c;大型对等方社区中的服务器 P2P文件分发 自拓展性 直接成因是&#xff1a;对等方除了是比特的消费者外还是它们的重新分发者BitTorrent 一个用于文件分发的P2P协议洪流 torrent 参与一个特定文件…

Python——列表

一、列表的特性介绍 列表和字符串⼀样也是序列类型的数据 列表内的元素直接⽤英⽂的逗号隔开&#xff0c;元素是可变的&#xff0c;所以列表是可变的数据类型&#xff0c;⽽字符串不是。 列表的元素可以是 Python 中的任何类型的数据对象。如&#xff1a;字符串、…

VQ35 评论替换和去除(char_length()和replace函数的使用)

代码 select id ,replace(comment,&#xff0c;,) as comment from comment_detail where char_length(comment)>3知识点 要注意替换的是中文逗号 由于题目说的是汉字长度大于3&#xff0c;所以这里就要使用char_length()而不是length() char_length()&#xff1a;单位为字…

Windows10使用u盘制作linux启动盘踩坑记

双系统方法有三种&#xff1a;1.虚拟机2.windows提供了ubuntu虚拟软件3.制作启动盘 本篇提供Windows10为基础使用u盘做启动盘可以使用linux双系统。 步骤一、 在Ubuntu官网下载镜像&#xff0c;很简单找到对应版本和机器型号&#xff0c;注意区分64位和x86&#xff0c;基本上…

day1 2/18

1> 使用fgets统计给定文件的行数 #include<myhead.h> int main(int argc, const char *argv[]) {if(argc!2){printf("enter error\n");return -1;}FILE*fpNULL;if((fpfopen(argv[1],"r"))NULL){perror("fopen error");return -1;}i…

详解C语言10大字符串函数【超详细建议点赞收藏】

目录 1. strlen----求字符串长度1.1 函数介绍1.2 函数使用1.3 模拟实现 2. strcpy----字符串拷贝2.1 函数介绍2.2 函数使用3.3 模拟实现 3. strcat----字符串追加3.1 函数介绍3.2 函数使用3.3 模拟实现 4. strcmp----字符串比较4.1 函数介绍4.2 函数使用 5. strncpy----长度受限…

innoDB page页结构详解

Page是整个InnoDB存储的最基本构件,也是InnoDB磁盘管理的最小单位,与数据库相关的所有内容都存储在这种Page结构里。 Page分为几种类型,常见的页类型有数据页(B+tree Node)Undo页(Undo Log Page)系统页(System Page) 事务数据页(Transaction System Page)等 Page 各…

二.重新回炉Spring Framework:Spring Framework主要组件概览

1.写在前面的话 这里主要简单说一下Spring Framework的几个核心组件的总体情况。为了比较直观&#xff0c;这里使用了ClassPathXmlApplicationContext的类图来进行说明。它基本上包含了 IoC 体系中大部分的核心类和接口。类图如下图所示&#xff1a; 2.Resource 组件体系 R…

常用类与基础API-String的理解和不可变性

1.String类的理解 1.1类的声明 public final class String >final &#xff1a;String是不可继承的。 >Serializable :可序列化的接口,凡是实现此接口的类的对象就可以通过网络或本地流进行数据的传输 >comparable:凡是实现此接口的类,其对象都可以比较大小. 1.…

华清远见嵌入式学习——驱动开发——作业1

作业要求&#xff1a; 通过字符设备驱动分步注册过程实现LED驱动的编写&#xff0c;编写应用程序测试&#xff0c;发布到CSDN 作业答案&#xff1a; 运行效果&#xff1a; 驱动代码&#xff1a; #include <linux/init.h> #include <linux/module.h> #include &l…

华清远见作业第三十六天和第三十七天——C++(第五天和第六天)

思维导图&#xff1a; 第五天&#xff1a; 第六天&#xff1a; 作业&#xff1a; 编程题&#xff1a; 以下是一个简单的比喻&#xff0c;将多态概念与生活中的实际情况相联系&#xff1a; 比喻&#xff1a;动物园的讲解员和动物表演 想象一下你去了一家动物园&#xff0c;…

常见的几种Web安全问题测试简介

Web项目比较常见的安全问题 1.XSS(CrossSite Script)跨站脚本攻击 XSS(CrossSite Script)跨站脚本攻击。它指的是恶意攻击者往Web 页面里插入恶意html代码&#xff0c;当用户浏览该页之时&#xff0c;嵌入其中Web 里面的html 代码会被执行&#xff0c;从而达到恶意用户的特殊…

什么是自动化测试?如何做自动化测试?

前面介绍了功能测试和接口测试&#xff0c;在介绍接口测试时提到了实现API自动化。那具体什么是自动化&#xff0c;为什么要做自动化&#xff0c;这里我们集中总结。 一. 什么是自动化&#xff1f; 顾名思义&#xff0c;自动化测试是相对人工测试而言的&#xff0c;它是指把人…

npm ERR! network This is a problem related to network connectivity.

问题详细描述 PS D:\ALearnBlog\shiyi-blog\blog-web> npm install -g vue/cli npm ERR! code ETIMEDOUT npm ERR! syscall connect npm ERR! errno ETIMEDOUT npm ERR! network request to https://registry.npmjs.org/vue%2fcli failed, reason: connect ETIMEDOUT 104.1…

Linux+Win双系统远程重启到Win

背景 电脑安装了双系统&#xff08;ubuntu 22.04 win11&#xff09;&#xff0c;默认进入ubuntu系统。给电脑设置了WoL(Wake-on-LAN)&#xff0c;方便远程开机远程控制。 但是ubuntu的引导程序grub无法远程控制&#xff0c;远程开机会默认进入ubuntu。 虽然说可以进入ubuntu后…

css2背景

css2背景 一.背景颜色二.背景图片三.背景平铺四.背景图片位置五.背景图像固定六.复合型写法七.背景颜色半透明八.总结 一.背景颜色 默认是transparent(透明&#xff09; 二.背景图片 默认是none 三.背景平铺 默认是background-repeat(平铺&#xff09; 四.背景图片位置…

OK-Robot机器人实现零样本算法 可在非结构化环境下完成拾取与放置任务

纽约大学的机器人专家团队与Meta人工智能学院研发人员共同合作开发了一种新型机器人&#xff0c;该机器人具备在非结构化环境下的认知能力&#xff0c;可在陌生房间利用视觉语言模型&#xff08;VLMs&#xff09;&#xff0c;进行物品的抓取与放置。在论文当中&#xff0c;该团…

在线黑色响应式全屏滚动主页html源码

html5黑色大气的个人博客全屏滚动个人主页源码 右键记事本即可修改 直接上传服务器空间就可使用

如何从 0 开始学 Python 自动化测试开发

&#x1f525; 交流讨论&#xff1a;欢迎加入我们一起学习&#xff01; &#x1f525; 资源分享&#xff1a;耗时200小时精选的「软件测试」资料包 &#x1f525; 教程推荐&#xff1a;火遍全网的《软件测试》教程 &#x1f4e2;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1…

2.18通过字符设备驱动分步注册过程实现LED驱动的编写,编写应用程序测试

应用程序&#xff1a; #include<stdlib.h> #include<stdio.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include<unistd.h> #include<string.h> #include<sys/ioctl.h> #include"myled.h&quo…