shell脚本条件测试、正整数字符串比较与if、case语句

文章详细介绍了Linuxshell脚本中的条件测试,包括test命令、[]和[[]]的不同用法,以及各种文件测试选项,如-e、-d等。此外,还讲解了整数和字符串的比较、逻辑运算符如-a、-o和!,并列举了常用的命令如echo、date、cal、tr、cut、sort和uniq的功能和用法。文章最后提到了if语句和case结构在脚本中的应用。

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

目录

条件测试

三种测试方法

选项

比较整数数值

字符串比较

脚本中常用命令

echo命令

date命令

cal命令

tr命令

cut命令

sort命令

uniq命令

cat多行重定向

if语句

分支结构

​编辑

case

使用格式


条件测试

三种测试方法

①test命令测试

②[   ]测试(注意前后需要有空格)

③[[   ]]加强版[   ],测试支持通配符和正则表达式

选项

-d:测试是否为目录
-e:测试目录或文件是否存在
-a:测试目录或文件是否存在
-f:测试是否为文件
-r:测试当前用户是否有权限读取
-w:测试当前用户是否有权限写入
-x:测试当前用户是否有权限执行
-L: 测试是否为软连接文件

比较整数数值

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

字符串比较

选项
=:字符串内容相同
!=:字符串内容不同,! 号表示相反的意思
-z:字符串内容为空
-n: 字符是否存在

逻辑测试

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

常见条件

-a或&&:逻辑与,“而且”的意思全真才为真
-o或||:逻辑或,“或者”的意思一真即为真
!:逻辑否

脚本中常用命令

echo命令

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

①echo   -n   表示输出不换行

②echo   -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

date命令

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

选项:

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

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

cal命令

cal命令:显示当月日历。

选项:

cal    12  显示本年整年日历

cal    某年  显示此年完整日历

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个字符,常用于生成随机密码。

cut命令

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

选项:

-d   指定分隔符   例如 cut  -d   ":"指定:为分隔符。

-f    选择第几列    例如  cut  -f3 取第三列,-f1,3取第1列和第三列,-f1-3取1-3列。

sort命令

sort命令:排序

选项:

-r 执行反方向(由上至下)整理

-n 按数字大小排序,默认第一列默认按字母顺序

-t 指定分隔符

-k 指定列 ,例如 -k3

uniq命令

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

-c 显示每个重复出现的次数

split 命令:分隔大文件

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

cat多行重定向

cat   <<EOF

1

2

3

EOF 

打印123到屏幕

if语句

分支结构

单分支

if 判断条件;

then   条件为真的分支代码

fi

例子:
#!/bin/bash
if [ "$USER" != "root" ]
then
        echo "非管理员用户无权限操作"
else
echo "是管理员用户"
fi
双分支

if 判断条件; then
 条件为真的分支代码

else
 条件为假的分支代码

fi
多分支

if 判断条件1
then
 条件1为真的分支代码

elif 判断条件2
then
 条件2为真的分支代码

elif 判断条件3;then
 条件3为真的分支代码

...
else
 以上条件都为假的分支代码

fi

例子:
#!/bin/bash
read -p "请输入你的考试分数:" grade

if [ $grade -ge 85 ]&& [ $grade -le 100 ]
then
echo "你的成绩为$grade"
echo "你的成绩为优秀"

elif [ $grade -ge 70 ]&&[ $grade -le 84 ]
then
echo "你的成绩为$grade"
echo "你的成绩为良好"
elif
[ $grade -ge 60 ]&&[ $grade -le 69 ]
then
echo "你的成绩为$grade"
echo "你的成绩为合格" 
else
echo "你的成绩为$grade"
echo "你的成绩不合格"
fi

case

使用格式

case   变量引用     in

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

分支1命令

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

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

分支2命令

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

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

默认分支命令

;; 分支结束的固定格式

esac   case语句结束标志

#!/bin/bash
read -p "请输入你的分数" score

case $score in
100)
echo "$score 你太优秀了"
;;
[89][0-9])
echo "$score 表现不错"
;;
[67][0-9])
echo "$score 你及格了"
;;
[0-9]|[1-5][0-9])
echo "$score 你不及格"
;;
*)
echo "输入有误"
esac

以下是 Shell 脚本中常用的命令以及使用方法: 1. echo:输出文本或变量值 用法:echo [选项] [字符串] 常用选项: -n:不换行输出 -e:启用转义字符 示例: ``` echo "Hello, world!" # 输出 Hello, world! echo -n "Hello, " # 输出 Hello, 不换行 echo "world!" # 输出 world!,上一行连在一起 echo -e "1\t2\t3\n4\t5\t6" # 输出带有制表符和换行符的字符串 ``` 2. read:接收用户输入 用法:read [选项] [变量名] 常用选项: -p:提示用户输入时显示的字符串 示例: ``` read -p "请输入你的名字:" name echo "你好,$name!" ``` 3. if条件语句 用法: ``` if [ 条件 ]; then # 条件成立时执行的语句 else # 条件不成立时执行的语句 fi ``` 示例: ``` if [ $1 -gt 0 ]; then echo "$1 是正整数" elif [ $1 -eq 0 ]; then echo "$1 是零" else echo "$1 是负整数" fi ``` 4. for:循环语句 用法: ``` for 变量 in 列表; do # 循环体 done ``` 示例: ``` for i in {1..10}; do echo $i done for file in *.txt; do echo $file done ``` 5. while:循环语句 用法: ``` while [ 条件 ]; do # 循环体 done ``` 示例: ``` i=1 while [ $i -le 10 ]; do echo $i i=$((i+1)) done ``` 6. case:多分支语句 用法: ``` case 变量 in 模式1) # 模式1 成立时执行的语句 ;; 模式2) # 模式2 成立时执行的语句 ;; *) # 所有模式都不成立时执行的语句 ;; esac ``` 示例: ``` case $1 in start) echo "启动服务" ;; stop) echo "停止服务" ;; restart) echo "重启服务" ;; *) echo "用法:$0 start|stop|restart" ;; esac ``` 7. test:测试文件或字符串是否存在,以及比较数值 用法: ``` test [选项] 参数 [选项] 参数 ``` 常用选项: -e:测试文件是否存在 -f:测试文件是否为普通文件 -d:测试文件是否为目录 -z:测试字符串是否为空 -n:测试字符串是否非空 -eq:测试数值是否相等 -lt:测试数值是否小于 -gt:测试数值是否大于 示例: ``` if test -e file.txt; then echo "file.txt 存在" fi if [ -f file.txt ]; then echo "file.txt 是普通文件" fi if [ -d dir ]; then echo "dir 是目录" fi if [ -z "$str" ]; then echo "str 是空字符串" fi if [ $num -gt 0 ]; then echo "num 是正数" fi ``` 8. grep:文本搜索工具 用法:grep [选项] 模式 [文件] 常用选项: -i:忽略大小写 -v:反向搜索,输出不匹配的行 -n:显示匹配行的行号 示例: ``` grep "hello" file.txt # 在 file.txt 中搜索 hello grep -i "hello" file.txt # 在 file.txt 中忽略大小写地搜索 hello grep -n "hello" file.txt # 在 file.txt 中搜索 hello 并显示匹配行的行号 grep -v "hello" file.txt # 在 file.txt 中反向搜索,输出不匹配的行 ``` 9. sed:流编辑器,用于文本替换 用法:sed [选项] '命令' 文件 常用命令: s/模式/替换/:替换指定模式为指定替换内容 示例: ``` sed 's/hello/hi/g' file.txt # 将 file.txt 中所有 hello 替换为 hi ``` 10. awk:文本处理工具,可进行简单数据分析和处理 用法:awk [选项] '模式 { 命令 }' [文件] 常用命令: print:输出指定内容 示例: ``` awk '{ print $1 }' file.txt # 输出 file.txt 中每行的第一个单词 ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值