shell 脚本语句

目录

条件语句

test 命令

比较整数数值

字符串比较

命令举

条件逻辑测试操作

组合写法

举例

双中括号

​编辑

( ) / { }

if 语句的结构

case 语句

脚本举例

识别 yes 和 no 脚本

检查磁盘使用情况脚本

新建用户以及随机设置用户密码的脚本

补充命令

[RANDOM%3+1]

ping 小脚本

make -j2

df -h |grep boot|awk '{print $5}'|tr -d %

grep -q

id -u

文件表达式


条件语句

test 命令

test作用
-d测试是否为目录
-e测试文件是否存在,不分文件和目录
-a测试目录或文件是否存在,有 bug 不建议使用
-f测试是否为文件
-r测试当前用户是否有权限读取
-w测试当前用户是否有权限写入
-x测试当前用户是否有权限执行
-l检测是否为软连接文件

比较整数数值

—— 格式:[ 整数1 -选项 整数2 ] 公式

选项作用
-eq第一个数 等于(Equal) 第二个数
-ne第一个数 不等于(Not Equal) 第二个数
-gt第一个数 大于(Greater Than) 第二个数
-lt第一个数 小于(Lesser Than) 第二个数
-le第一个数 小于或等于(Lesser or Equal) 第二个数
-ge第一个数 大于或等于(Greater or Equal) 第二个数

字符串比较

符号格式作用
=[ 字符串1 = 字符串2 ]字符串内容相同
!=[ 字符串1 != 字符串2 ]字符串内容不同,!号表示取反
-z[ -z 字符串 ]字符串内容为空
-n[ -n 字符串 ]字符是否存在
命令举
[root@localhost ~]# text1=yuan      #定义 text1
[root@localhost ~]# text2=shen      #定义 text2#因为二者不同,此举是比较相同字符串,所以命令错误,显示为 1
[root@localhost ~]# [ $text1 = $text2 ];echo $?
1     #正确则显示 0 ,反之为错误输出 
#因为二者不同,此举是比较不同字符串,所以命令正确,显示为 0
[root@localhost ~]# [ $text1 != $text2 ];echo $?
0[root@localhost ~]# text3=          #定义 text3,不输入内容
#因为 text3 没有内容,此举是查看字符串内容为空
[root@localhost ~]# [ -z $text3 ];echo $?
0
[root@localhost ~]# [ -z $text2 ];echo $?
1

条件逻辑测试操作

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

命令1 操作符 命令2

选项注释
-a 或 &&逻辑与,表示且的意思
-o 或 ||逻辑或,表示或的意思
逻辑否,取反

短路与 &&

全真才为真

一假即为假

—— 例:命令1 操作符 命令2 / [ 表达式1 ] 操作符 [ 表达式2 ]

其中一个错则不执行,必须两个都是正确的才能执行

短路或 ||

一真即为真

全假才为假

—— 例:命令1 操作符 命令2 / [ 表达式1 ] 操作符 [ 表达式2 ]

其中一个正确的就可以执行,必须两个都错才不执行

组合写法

先 短路与 后 短路或

—— 只有这一种组合写法

举例
#上一条命令执行成功
[root@localhost opt]# echo $?
0
#等于0,执行成功,所以直接显示且(&&)后面的内容
[root@localhost opt]# [ $? -eq 0 ] && echo "成功" || echo "失败"
成功
#不大于0,执行失败,所以直接显示或(||)后面的内容
[root@localhost opt]# [ $? -gt 0 ] && echo "成功" || echo "失败"
失败

双中括号

—— [[ ]] 加强版的单个 [ ] ,可以支持正则表达式和通配符(字符)

[[ ]] 用法

[[ == ]] :左侧字符串是否和右侧的 pattern 相同

右侧接通配符

[[ =~ ]] :左侧字符串是否能够被右侧的正则表达式的 pattern 所匹配

右侧接正则表达式

[[ != ]] :取反

[root@localhost opt]# q=text.log
​
[root@localhost opt]# [[ "$q" == *.log ]] ;echo $?
0
[root@localhost opt]# [[ "$q" != *.log ]] ;echo $?
1
[root@localhost opt]# [[ "$q" =~ *.log ]] ;echo $?
2
​
[root@localhost ~]# w=text.sh
​
[root@localhost ~]# [[ "$w" =~ sh$ ]];echo $?
0
[root@localhost ~]# [[ "$w" =~ *.sh ]];echo $?
2
[root@localhost ~]# [[ "$w" =~ *.sh$ ]];echo $?
2


( ) / { }

—— 作用:二者都可以将多个命令组合在一起,批量执行

—— ( ) :会开启子 shell

—— { }:不会开启子shell


if 语句的结构

#单分支
​
if 判断条件
then
条件为真的分支代码       #当判断条件成立,执行一跳或多条命令
fi                    #结尾
​
​
#双分支
​
if 判断条件
then
条件为真的分支代码       #当条件判断成立时,可以执行一条或多条命令
else
条件为假的分支代码       #当条件判断不成立时,可以执行一条或多条命令
fi             
​
​
#多分支
​
if 判断条件1
then
条件1为真的分支代码
elif 判断条件2
then
条件2为真的分支代码
elif 判断条件3
then
条件3为真的分支代码
​
......
else
以上条件都为假的分支代码     #托底,当上述都不成立,执行一条或多条命令
​

case 语句

​
#格式
​
case 变量名称 in
模式1)
命令序列
;;
模式2)
命令序列
;;
​
.
.
.
​
*)                     #不包含第一个变量内容与第二个变量内容的其他程序执行段
默认程序段
;;
esac                   #结尾
​
#注意
模式字符串中,可以用方括号表示一个连续的范围,如 "[0-9]";还可以使用竖杠 | 表示或,比如 a|b
最后的“)”表示默认模式,其中的相当于通配符
​

脚本举例

识别 yes 和 no 脚本

#!/bin/bash
read -p "请输入yes/no:" yn
yn=`echo $yn|tr 'A-Z' 'a-z'` #无论 yes 或 no 怎么输入,都能识别;YeS On
case $yn in
yes|y)
echo "识别为yes"
;;
no|n)
echo "识别为no"
;;
​
*)
echo "无法识别,重新输入"
bash $0
;;
esac
 
检查磁盘使用情况脚本


#!/bin/bash
use=`df -h|grep boot|awk '{print $5}'|tr -d %`
​
[ $use -gt 80 ] && echo "磁盘使用过高"||echo "磁盘使用正常"
​

新建用户以及随机设置用户密码的脚本

​
#!/bin/bash
read -p "告诉我你要新建用户的名字:" name
​
grep -q $name /etc/passwd
if [ $? -eq 0 ]
then
echo "该用户已经存在了"
exit
else
useradd $name
pass=`cat /dev/random |tr -dc [[:alnum:]] |head -c 12`
#进入到随机生成字符的文件中,并且删除所有的特殊符号,打印前 12 个字符
echo $pass |passwd $name --stdin
#将 $pass 执行的标准输出的结果,标准输入到 $name 定义的用户的 passwd 命令中,为该用户的密码
echo $pass >> /opt/mima.txt
#在 /opt 目录下新建文件 mima.txt 并将打印出来的前 12 个字符保存其中 
fi
​
​

补充命令

[RANDOM%3+1]

—— 限制范围 1到 3

ping 小脚本

—— -W(大写):超过时间,默认单位秒

—— -w :多少秒后停止 ping 操作

—— -c :发送包的个数

—— -i :发送的间隔时间

例
$1=192.168.88.1               #定义 IP
​
ping -c 3 -i 0.5 -W2 $1 &> /dev/null && echo "$1 online" || echo "$1 off"
#ping $1 定义的 IP 次数 3 次,发送间隔时间为 0.5秒,超时 2秒 并将标准输出的信息放入垃圾箱,ping 成功显示 online ,失败则显示 off
#注意 W 为大写

make -j2

—— 命令可以开启 2 个任务同时运行,并行构建大大加快构建速度

df -h |grep boot|awk '{print $5}'|tr -d %

—— awk :是一种文本处理工具,它可以用于从文件或标准输入中提取和操作数据。它以行为单位读取输入,并根据指定的规则进行处理

—— print $5 :压缩空格,默认打印第五列

grep -q

—— 悄悄的执行命令,不显示

id -u

—— 判断当前用户是否为管理员

文件表达式
格式:选项 文件名作用
-e如果文件存在,则为真
-d如果文件为目录,则为真
-f如果文件为常规文件,则为真
-L如果文件为符号连接,则为真
-r如果文件可读,则为真
-w如果文件可写,则为真
-x如果文件可执行,则为真
-s如果文件长度不为0,则为真
-h如果文件是软链接,则为真

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

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

相关文章

【高性能计算】CUDA,OpenCL,FPGA 加速,MPI

OpenCL OpenCL(Open Computing Language)是一种跨平台的GPU加速技术,由Khronos Group开发。OpenCL允许开发人员在不同的硬件平台上编写并行计算应用程序。 OpenCL使用C语言的子集来编写应用程序,并提供了一组API,可以…

web:[GXYCTF2019]禁止套娃

题目 打开页面显示为 没有其他信息,查看源代码也是空的 用dirsearch扫一下 可能是git源码泄露,可以用githack获取源码 python Githack.py http://5063c85b-a33d-4b6f-ae67-262231a4582e.node4.buuoj.cn:81/.git/去工具所在的目录找到index.php文件 打开…

hm商城微服务远程调用及拆分

RequiredArgsConstructor是Lombok库中的一个注解 它会自动在类中生成一个构造函数,这个构造函数会接收类中所有被标记为final的字段,并将其作为参数。这个注解可以帮助我们减少样板代码,例如手动编写构造函数。 eg: public fin…

【JavaEE】Spring的创建和使用(保姆级手把手图解)

一、创建一个Spring项目 1.1 创建一个Maven项目 1.2 添加 Spring 框架支持 在pom.xml中添加 <dependencies><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>5.2.3.RELEASE&…

数据仓库架构之详解Kappa和Lambda

目录 一、前言 二、架构详解 1 Lambda 架构 1.1 Lambda 架构组成 1.2 Lambda 特点 1.3 Lambda 架构的优点 1.4 Lambda 架构的不足 2 Kappa 架构 2.1 Kappa 架构的核心组件 2.2 Kappa 架构优点 2.3 Kappa 架构的注意事项 三、区别对比 四、选择时考虑因素 一、前言 …

vue解除数据双向绑定

let obj JSON.parse(JSON.stringify(data));例如&#xff0c;table列表中&#xff0c;点击编辑时&#xff0c;可对val进行如上操作来解除双向绑定

【冒泡排序设计】

【冒泡排序设计】 思路代码结果 思路 冒泡排序这个算法&#xff0c;对于我这样的初学者来说&#xff0c;也不是很简单&#xff01;&#xff01;&#xff01;&#xff08;没有想象的那么简单&#xff09;&#xff01;  它的核心思想是&#xff1a;两两相邻的元素进行比较&#…

源码安装Apache

一、下载Apache,源码安装Apache #下载 [rootlocalhost opt]# wget -c https://mirrors.aliyun.com/apache/httpd/httpd-2.4.58.tar.gz [rootlocalhost opt]# ls httpd-2.4.58.tar.gz [rootlocalhost opt]# tar -xf httpd-2.4.58.tar.gz [rootlocalhost opt]# ls httpd-2.4.58…

达索系统3DEXPERIENCE WORKS 2024 Fabrication新功能

当发现产品的制造环节&#xff0c;以及因产品模型本身的设计而导致制造环节存在不合理性&#xff0c;从而导致加工制造成本增加。 快速判断&#xff0c;轻松协作 在达索系统3DEXPERIENCE WORKS 2024中我们可以快速的判断产品的可制造性&#xff0c;以及快速与前端设计沟通协作…

Linux驱动开发笔记(四):设备驱动介绍、熟悉杂项设备驱动和ubuntu开发杂项设备Demo

若该文为原创文章&#xff0c;转载请注明原文出处 本文章博客地址&#xff1a;https://hpzwl.blog.csdn.net/article/details/134533533 红胖子网络科技博文大全&#xff1a;开发技术集合&#xff08;包含Qt实用技术、树莓派、三维、OpenCV、OpenGL、ffmpeg、OSG、单片机、软硬…

[AutoSar]在Davinci Configurator中导入Dbc Cdd 文件

目录 关键词平台说明一、实现步骤1.1 添加相关模块1.2 导入文件1.3 加载完成后点next而不是finish1.4 更新配置1.5 解决错误 关键词 嵌入式、C语言、autosar 平台说明 项目ValueOSautosar OSautosar厂商vector芯片厂商TI编程语言C&#xff0c;C编译器HighTec (GCC) 一、实现…

【码神之路】【Golang】博客网站的搭建【学习笔记整理 持续更新...】

介绍 一个用原生GO开发的博客网站&#xff0c;涉及Golang Web开发、Web服务器搭建和HTTP请求处理、模板与静态资源处理等 技术栈 后端&#xff1a;Go、Go并发机制前端&#xff1a;HTML模版链接直达 Golang搭建博客网站的学习视频 注&#xff1a;这里我只记录我实质✅学习到…

2021秋招-数据结构-栈、队列、数组、列表

栈、队列、数组、列表 实现方式 队列 class Queue:def __init__(self):self.items []def enqueue(self, item):self.items.append(item)def dequeue(self):return self.items.pop(0)def empty(self):return self.size() 0def size(self):return len(self.items)应用: 约瑟…

【Hello Go】Go语言文本文件处理

文本文件处理 字符串处理字符串操作ContainsJoinindexrepeatReplaceSplitTrimFields 字符串转换AppendFormatParse 正则表达式Json处理编码Json通过结构体生产Json通过map生产json 解码Json解析到结构体解析到interface 文件操作相关api介绍建立和打开文件关闭文件写文件读文件…

中国出海主力系列专访之三七互娱:亚马逊云科技助力三七互娱海外“出圈”之路

如果问&#xff0c;在众多的中国出海赛道中哪一条拥有基数最大的粉丝拥趸&#xff1f;以网络游戏、社交媒体、直播、短视频为代表的泛娱乐赛道便成为当仁不让的领跑者。 在东京、新加坡、开罗、伦敦、纽约、慕尼黑等国际都市&#xff0c;当地的年轻人会随时随地的打开“中国造”…

JOSEF 静态中间继电器 ZJY-420 DC220V 板前接线,带底座 增加触点

系列型号&#xff1a; ZJY-400中间继电器&#xff1b;ZJY-600中间继电器&#xff1b; ZJY-800中间继电器&#xff1b;ZJY-020中间继电器&#xff1b; ZJY-040中间继电器&#xff1b;ZJY-060中间继电器&#xff1b; ZJY-006中间继电器&#xff1b;ZJY-008中间继电器&#xff1b;…

SD-WAN技术:重新定义网络连接方式

随着数字化转型的不断加速&#xff0c;企业对网络的需求呼之欲出。传统的WAN网络由于配置复杂、成本高昂以及带宽利用率低等问题而面临挑战。这时SD-WAN技术的出现正好派上了用场&#xff0c;通过其虚拟化、自动化和智能化的技术手段&#xff0c;大幅度提高了企业网络性能和可靠…

Ps:裁剪工具 - 裁剪预设的应用

裁剪工具提供了两种类型的裁剪方式。 一种是仅按宽高比&#xff08;比例&#xff09;进行裁剪&#xff0c;常在对图像进行二次构图时采用。 另一种则按指定的图像尺寸&#xff08;宽度值和高度值&#xff09;及分辨率&#xff08;宽 x 高 x 分辨率&#xff09;进行裁剪。其实质…

关于一些网络的概述

语义分割网络是一种基于深度学习的计算机视觉技术,它能够将图像中的每个像素分配给特定的类别,从而实现对图像中不同对象的精确识别和定位。近年来,随着深度学习技术的不断发展,语义分割网络在各个领域都取得了显著的进展。 早期的语义分割网络主要采用全卷积神经网络(FC…

scala的schema函数(算子)

在翻阅一些代码的时候&#xff0c;schema算子好像没碰到过&#xff0c;比较好奇structField这个类型&#xff0c;为什么可以直接用name参数&#xff0c;就翻阅了下资料&#xff1a; 在 Apache Spark 中&#xff0c;DataFrame 是一种分布式的数据集&#xff0c;它是以类似于关系…