shell 脚本语句

news2024/11/14 23:59:45

目录

条件语句

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.coloradmin.cn/o/1236175.html

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

相关文章

Python+Qt虹膜检测识别

程序示例精选 PythonQt虹膜检测识别 如需安装运行环境或远程调试,见文章底部个人QQ名片,由专业技术人员远程协助! 前言 这篇博客针对《PythonQt虹膜检测识别》编写代码,代码整洁,规则,易读。 学习与应用推…

【C++进阶之路】第十一篇:C++的IO流

文章目录 1. C语言的输入与输出2. 流是什么3. CIO流3.1 C标准IO流3.2 C文件IO流 4.stringstream的简单介绍 1. C语言的输入与输出 C语言中我们用到的最频繁的输入输出方式就是scanf ()与printf()。 scanf(): 从标准输入设备(键盘)读取数据,并将值存放在变量中。prin…

京东数据分析(京东数据采集):2023年10月京东平板电视行业品牌销售排行榜

鲸参谋监测的京东平台10月份平板电视市场销售数据已出炉! 根据鲸参谋电商数据分析平台的相关数据显示,10月份,京东平台上平板电视的销量将近77万,环比增长约23%,同比则下降约30%;销售额为21亿,环…

大数据Doris(二十七):Routine Load数据导入演示

文章目录 Routine Load数据导入演示 一、启动kafka集群(三台节点都启动) 二、创建topic

「MACOS限定」 如何将文件上传到GitHub仓库

介绍 本期讲解:如何在苹果电脑上上传文件到github远程仓库 注:写的很详细 方便我的朋友可以看懂操作步骤 第一步 在电脑上创建一个新目录(文件夹) 注:创建GitHub账号、新建github仓库、git下载的步骤这里就不过多赘…

数据库基本操作--------高级MySQL语句

一、高级SQL语句 1、SELECT ----显示表格中一个或数个栏位的所有资料 语法:SELECT “栏位” FROM “表名”; SELECT Store_Name FROM Store_Info; 2、DISTINCT ----不显示重复的资料 语法:SELECT DISTINCT “栏位” FROM “表名”; SELECT DISTINCT Sto…

Docker快速搭建RTMP服务(tiangolo/nginx-rtmp:Docker + Nginx+ nginx-rtmp-module)

Linux Docker快速搭建多媒体/视频流的 RTMP 服务 第一步 安装Docker 点击这里查看 第二步 拉取并运行镜像 tiangolo/nginx-rtmp/ docker pull tiangolo/nginx-rtmp docker run -d -p 1935:1935 --name nginx-rtmp tiangolo/nginx-rtmpOBS客户端测试 OBS客户端设置直播的推…

【python笔记】客户运营 - cohort分析

一、数据 本文涉及数据下载链接。 二、数据预处理 2.1 读取数据 import pandas as pddf pd.read_csv(your_path/Year 2010-2011.csv, encodingISO-8859-1) df.head()2.2 检查数据 检查空值情况 df.isna().sum() # 结果 Invoice 0 StockCode 0 De…

LeetCode 热题100——栈与队列专题(三)

一、有效的括号 20.有效的括号(题目链接) 思路: 1)括号的顺序匹配:用栈实现,遇到左括号入,遇到右括号出(保证所出的左括号与右括号对应),否则顺序不匹配。 2…

【Spring Boot】如何在Linux系统中快速启动Spring Boot的jar包

在Linux系统中先安装java的JDK 然后编写下列service.sh脚本,并根据自己的需求只需要修改export的log_path、exec_cmd参数即可 # 配置运行日志输出的路径 export log_path/usr/local/project/study-pro/logs # 当前服务运行的脚本命令 export exec_cmd"nohup /u…

【ARM AMBA AXI 入门 15 -- AXI-Lite 详细介绍】

请阅读【ARM AMBA AXI 总线 文章专栏导读】 文章目录 AXI LiteAXI-Full 介绍AXI Stream 介绍AXI Lite 介绍AXI Full 与 AIX Lite 差异总结AXI Lite AMBA AXI4 规范中包含三种不同的协议接口,分别是: AXI4-FullAXI4-LiteAXI4-Stream 上图中的 AXI FULL 和 AIX-Lite 我们都把…

安防视频监控管理平台EasyCVR定制首页开发与实现

视频监控平台EasyCVR能在复杂的网络环境中,将分散的各类视频资源进行统一汇聚、整合、集中管理,在视频监控播放上,TSINGSEE青犀视频安防监控汇聚平台可支持1、4、9、16个画面窗口播放,可同时播放多路视频流,也能支持视…

基于 Eureka 的 Ribbon 负载均衡实现原理【SpringCloud 源码分析】

目录 一、前言 二、源码分析 三、负载均衡策略 一、前言 如下图,我们在 orderserver 中通过 restTemplate 向 usersever 发起 http 请求,在服务拉取的时候,主机名 localhost 是用服务名 userserver 代替的,那么该 url 是一个可…

Linux docker安装RStudio Server结合内网穿透实现公网访问内网服务

📷 江池俊: 个人主页 🔥个人专栏: ✅数据结构探索 ✅cpolar 🌅 有航道的人,再渺小也不会迷途。 文章目录 前言1. 安装RStudio Server2. 本地访问3. Linux 安装cpolar4. 配置RStudio server公网访问地址5…

ECharts 实例2

之前做过一个 ECharts 例子&#xff1b;再做一个看一下&#xff1b; <!DOCTYPE html> <html> <head><meta charset"gb2312"><title> 多bar 实例</title><!-- 引入 echarts.js --><script src"https://cdn.static…

信号的处理时机(内核态,用户态,如何/为什么相互转换,内核空间,cpu寄存器),信号的处理流程详细介绍+抽象图解

目录 信号的处理时机 引入 思考 -- 什么时候才能算合适的时候呢? 用户态转为内核态 引入 内核地址空间 引入 思考 -- 进程为什么能切换成内核态呢? 虚拟地址空间 注意点 原理 (总结一下) 为什么如何进入内核态 引入 介绍 底层原理(int 80) cpu的寄存器 用…

JSP编写自己的第一个WebServlet实现客户端与服务端交互

我们在项目中找到java目录 下面有一个包路径 然后 我们在下面创建一个类 我这里叫 TransmissionTest 当然 名字是顺便取的 参考代码如下 package com.example.dom;import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet…

runnergo全栈测试平台

一、全栈测试平台runnergo使用 官网 官方使用文档 二、单接口测试 三、性能测试 1.性能测试 2.性能测试报告 四、自动化测试&#xff08;暂时不支持UI自动化&#xff0c;或许会上&#xff09;

centos7卸载mongodb数据重新安装时无法安装的问题

如果卸载不干净直接用 sudo find / -name mongo 查询所有关于mongo的文件&#xff0c;然后一个个去删除。 当然最好的办法还是去看日志信息。 直接去查看日志信息 sudo cat /var/log/mongodb/mongod.log 根据提示信息说这个没有权限操作 直接删除即可&#xff0c;都是之前…

服务器数据恢复—raid5上层NTFS分区误删除/格式化的数据恢复案例

NTFS是windows操作系统服务器应用最为广泛的文件系统之一。理论上&#xff0c;NTFS文件系统格式化操作虽然不会对数据造成太大的影响&#xff0c;但是有可能会出现部分文件目录结构丢失的情况。下面介绍一台服务器误操作导致raid5阵列上层的NTFS分区被格式化后如何逆向操作恢复…