当前位置: 首页 > news >正文

Linux系统之shell脚本基础:条件测试、正整数字符串比较与if、case语句

目录

一.条件测试

1.三种测试方法

2.正整数值比较

3.字符串比较

4.逻辑测试

二.脚本中常用命令

1.echo命令

2.date命令

3.cal命令

4.tr命令

5.cut命令

6.sort命令

7.uniq命令

8.cat多行重定向

三.if语句

1.使用格式

2.if语句实例

四.case格式

1.使用格式

2.case语句实例


一.条件测试

1.三种测试方法

  • test命令测试
  • [   ]测试(注意前后需要有空格)
  • [[   ]]加强版[   ],测试支持通配符和正则表达式

三种测试方法选项:

  • -d:测试是否为文件夹
  • -f:测试是否为普通文件
  • -e:测试文件或目录是否存在
  • -a:测试文件或目录是否存在,不建议使用此选项,取反!=时echo  $?是错误的返回值。
  • -L:测试是否为软连接文件
  • -r:判断当前用户是否有读权限,根据实际情况返回结果,不是按ll显示的文件属性权限。
  • -w:判断当前用户是否有写权限,根据实际情况返回结果,不是按ll显示的文件属性权限。
  • -x:判断当前用户是否有执行权限,根据实际情况返回结果,root账户时其他用户有执行权限root账户也有,若其他账户没有执行权限则root也没有。

2.正整数值比较

 比较方法使用上述三种条件测试即可,①test命令②[ ] 注意前后空格③[[  ]]注意前后空格

选项:

  • -eq:比较第一个正整数是否等于(equal)第二个正整数
  • -ne:比较第一个正整数不等于(not equal)第二个正整数
  • -gt:比较第一个正整数是否大于(Greate than)第二个正整数
  • -lt:比较第一个正整数是否小于(Lesser than)第二个正整数
  • -ge:比较第一个正整数是否大于等于(Greate or equal )第二个正整数
  • -le:比较第一个正整数是否小于等于(Lesser or  equal)第二个正整数

3.字符串比较

比较方法使用上述三种条件测试即可,①test命令②[ ] 注意前后空格③[[  ]]注意前后空格  

选项:

  • =:等号前后字符串是否相等,注意前后需要空格。
  • !=:!表示取反的意思,等号前后字符串是否不相等,注意前后需要空格。
  • -z:判断字符串是否为空
  • -n:字符是否存在

4.逻辑测试

  1. 格式1: 【表达式1】 操作符 【表达式2】

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

操作符:

&&或-a:表示且的意思,前面表达式或命令1为真才会执行操作符后面的表达式2或命令2,一假则为假。

ll或-o:表示或的意思,前面表达式1或命令1为真则整个表达式为真,前面表达式1或命令1为假则执行操作符后面的表达式2或命令2,一真则为真。

!:逻辑否。

二.脚本中常用命令

1.echo命令

echo命令:打印内容在窗口中。

  • -n :表示输出不换行
  • -e :表示输出转义符

echo  -e 配合转义符。

  • \b:退格,删除前一个字符。例如 echo -e "1234\b56"则输出的是12356,4会被删除。
  • \c:抑制更多输出,\c后的内容全部不输出。例如 echo -e   "123\c456"则输出的是123。
  • \n:输出换行,\n后的内容换行。例如 echo  -e  "123\n456  " 则输出123下一行输出456。
  • \t:相当于输出过程中按了一下tab键。
  • \f:输出换行但是光标位置不变。例如echo -e  "123\f456"则输入123下一行开头空出123的位置然后再输出456。

2.date命令

date命令:查看时间,显示格式为,星期  月  日 时 分 秒  年

选项:

  • +%F:输出格式年-月-日,注意%在crontab定时中不能直接使用,需要转义
  • +%T:输出格式时:分:秒, 注意%在crontab定时中不能直接使用,需要转义

3.cal命令

cal命令:显示当月日历。

选项:

cal    12  显示本年整年日历

cal    某年  显示此年完整日历

4.tr命令

tr命令:替换内容

基本格式:tr    需要替换的内容     替换后的内容

例如:  tr  [a-z]     [A-Z]  遇见小写字母全部转为大写字母 

选项:

  • -s:压缩功能。例如:tr -s aaa 输出a;
  • -d:删除功能:例如:tr -d abc 则输入123abc回车只会打印123;
  • -c:用字符串1中字符集的补集替换此字符集,例如 cat /dev/random | tr -dc [[:alnum:]]  | head -c 12。  /dev/random中是随机的字符内容
  •  -dc 表示删除其他不需要内容   [[:alnum:]] 表示数字和字符      head   -c 12  表示取前12个字符,完整表达式意思为查看random文件并将非字符和数字内容删除然后取前12个字符,常用于生成随机密码。

5.cut命令

cut命令:提取想要的信息。

选项:

  • -d:指定分隔符   例如 cut  -d   ":"指定:为分隔符。
  • -f:选择第几列    例如  cut  -f3 取第三列,-f1,3取第1列和第三列,-f1-3取1-3列。

6.sort命令

sort命令:排序

选项:

  • -r:执行反方向(由上至下)整理;
  • -n:按数字大小整理,默认第一列默认字母顺序;
  • -t:制定分隔符;
  • -k:指定列,例如-k3。

7.uniq命令

uniq命令:去除连续的重复,一般配合sort使用。

-c:显示每个重复的次数。

split命令:分隔大文件

-b 大小(例如1G)+ 要分隔文件名 加名称分隔指定名称,但是后面的xaa,xab不能指定,只能指定x。

8.cat多行重定向

cat   <<EOF

1

2

3

EOF 

打印123到屏幕

三.if语句

1.使用格式

then   (条件1成立则走then)

[执行命令] 

elif  [条件判断2 ]    (可添加多个elif )

then (条件2成立则走then)

[执行命令] 

else    (所有条件不成立则走else)

[执行命令] 

fi   (if结束语句)

2.if语句实例

学生输入分数判断自己的成绩是优秀(91-100)、良好(81-90)、及格(60-80)、不及格(小于60)

四.case格式

1.使用格式

case   变量引用     in

PAT1)    符合条件1执行分支1的命令,PAT1可以使用通配符

分支1命令

;;   每个分支结束的固定格式

PAT2)    符合条件1执行分支2的命令,PAT2可以使用通配符

分支2命令

;;   每个分支结束的固定格式,可以有多个分支

*) 不符合其他任意分支的默认分支

默认分支命令

;; 分支结束的固定格式

esac   case语句结束标志

2.case语句实例

相关文章:

  • C# Winforms 本地化 多语言支持 字符串资源
  • 如何管理两个Git账户
  • Android第六次面试总结之Java设计模式篇(一)
  • 使用VMware Workstation pro 17.5.1在Windows上安装Ubuntu 24.04.2的 详细步骤
  • 结合Hutool 突增突降检测的算法
  • javascript Map 和对象使用
  • 安卓基础(点击按钮动态添加视图到容器)
  • 单片机-STM32部分:5、STM32CubeMX实现HAL点灯
  • Leetcode Hot 100字母异位词分词
  • Vue 项目中使用 EJS 模板动态注入环境变量
  • 哪些岗位需要考取城市客运安全员证?
  • SCINet 训练代码修改
  • cmake qt 项目编译(win)
  • npm下载插件无法更新package.json和package-lock.json文件的解决办法
  • clickhouse - 重新建表覆盖旧表-解决分区时间错误问题-197001
  • AI内容检测的技术优势与应用场景
  • Java注解
  • Linux开发工具【上】
  • win11共享打印机主机设置
  • 使用 Python 监控系统资源
  • A股三大股指收涨:军工股掀涨停潮,两市成交近1.5万亿元
  • 娱见 | 为了撕番而脱粉,内娱粉丝为何如此在乎番位
  • 马上评|从一个细节看今年五一档电影
  • 被炒热的“高潮针”:超适应症使用,安全性和有效性存疑
  • 熬夜又不想伤肝?方法只有一个
  • 一周文化讲座|那些年的年青人