测试
test测试文件的表达式 是否成立
格式
选项
[root@localhost ~]# test -d /etc/
[root@localhost ~]# echo $?
0
[root@localhost ~]# test -e /etc
[root@localhost ~]# echo $?
0
[root@localhost ~]# test -e /fwf
[root@localhost ~]# echo $?
1
[root@localhost ~]# test -a /etc
[root@localhost ~]# echo $?
0
[root@localhost ~]# test -a /fwf
[root@localhost ~]# echo $?
1
a和e的区别在于a不可以取非
[root@localhost ~]#[ ! -e /etc/shadow ]
[root@localhost ~]#echo $?
1
[root@localhost ~]#[ ! -a /etc/shadow ]
[root@localhost ~]#echo $?
0
[root@localhost ~]# test -f /etc/init.d
[root@localhost ~]# echo $?
1
[root@localhost ~]# test -f /etc/yum.conf
[root@localhost ~]# echo $?
0
root执行权限别人没有root也没有,别人有root也有
[root@localhost 123]# ll /etc/shadow
----------. 1 root root 1266 11月 8 13:21 /etc/shadow
[root@localhost 123]# [ -r /etc/shadow ]
[root@localhost 123]# echo $?
0
#实际效果,不是表面显示,注意root权限
[root@localhost 123]# [ -x /etc/shadow ]
[root@localhost 123]# echo $?
1
#root执行权限别人没有root也没有,别人有root也有
[root@localhost 123]#
[root@localhost /]# test -L /etc/localtime
[root@localhost /]# echo $?
0
[root@localhost /]# test -L /etc/yum.conf
[root@localhost /]# echo $?
1
[root@localhost /]#
比较整数数值
格式
选项
-lt:第一个数小于(Lesser Than)第二个数
-le:第一个数小于或等于(Lesser or Equal)第二个数
–ge:第一个数大于或等于(Greater or Equal)第二个数
[root@localhost /]# a=6
[root@localhost /]# b=9
[root@localhost /]# [ $a -eq $b ]
[root@localhost /]# echo $?
1
[root@localhost /]# [ $a -le $b ]
[root@localhost /]# echo $?
0
[root@localhost /]#
字符串比较
常用的测试操作符
-n: 字符是否存在
格式
[root@localhost /]# qwe=xuyucheng
[root@localhost /]# rty=taishuail
[root@localhost /]# [ $qwe = $rty ]
[root@localhost /]# echo $?
1
[root@localhost /]# rty=xuyucheng
[root@localhost /]# [ $qwe = $rty ]
[root@localhost /]# echo $?
0
[root@localhost /]#
[root@localhost /]# qwe=xuyucheng
[root@localhost /]# rty=taishuail
[root@localhost /]# [ $qwe != $rty ]
[root@localhost /]# echo $?
0
[ -z 字符串 ] 是否为空
[root@localhost /]# rty=taishuail
[root@localhost /]# [ -z $rty ]
[root@localhost /]# echo $?
1
[root@localhost /]# rty=" "
[root@localhost /]# [ -z $rty ]
[root@localhost /]# echo $?
0
[root@localhost /]#
[ -n 字符串 ] 字符是否存在
逻辑测试
格式
1. [ 表达式1 ] 操作符 [ 表达式2 ] …
且 (全真才为真)
第一个要真 第二 个也要真 才能是真
如果第一个为假 ,整个 就为假 不用执行下个操作
或 (一真即为真)
如果第一个 为真 那么 不用执行第二个
第一个为假 ,才需要执行第二个
常见条件
-a或&&:逻辑与,“而且”的意思全真才为真
-o或||:逻辑或,“或者”的意思一真即为真
!:逻辑否
双中括号
[[ expression ]] 用法
== 左侧字符串是否和右侧的PATTERN相同
注意:此表达式用于[[ ]]中,PATTERN(元字符)为通配符
=~ 左侧字符串是否能够被右侧的正则表达式的PATTERN所匹配
[root@localhost ~]# xuc=tre.log
[root@localhost ~]# [[ "$xuc" == *.log ]] //是否有.log结尾的
[root@localhost ~]# echo $?
0
[root@localhost ~]# xuc=tre.text //将字符串重新定义
[root@localhost ~]# [[ "$xuc" == *.log ]] //是否有.log结尾的
[root@localhost ~]# echo $?
1
[root@localhost ~]# [[ "$xuc" != *.log ]] //!取反 是否没有.log结尾的
[root@localhost ~]# echo $?
0
[root@localhost ~]#
( ){ } 可以将多个命令组合在一起,批量执行
[root@localhost ~]# (cd /opt;ls)
999 nginx-1.18.0 qqq.sh test2
aa nginx-1.18.0.tar.gz rh
a.tar.gz nginx-1.18.0.tar.gz.0 test
etc qqq test1
( )会开启子shell
{ } 不会开启子进程
if语句的结构
不成功 不执行
分支结构
单分支
if 判断条件;
fi
双分支
if 判断条件;then
fi
多分支
…
else
以上条件都为假的分支代码 托底
fi
举例
单分支
判断是否为超级管理员
#!/bin/bash
if [ "$USER" != "root" ]
then
echo "非用户管理员"
else
echo "是管理员用户"
fi
判断主机连通性
#!/bin/bash
ping -c 3 192.168.17.2
if
[ $? = 0 ]
then
echo "与真机网络通畅"
exit 1
fi
echo "与真机不通"
多分支
考试成绩
#!/bin/bash
read -p "请输入你的成绩:" cj
if [ $cj -ge 85 ]&&[ $cj -le 100 ]
then
echo "你的成绩为$cj"
echo "你的成绩为优秀"
elif [ $cj -ge 70 ]&&[ $cj -le 84 ]
then
echo "你的成绩为$cj"
echo "你的成绩为良好"
elif [ $cj -ge 60 ]&&[ $cj -le 69 ]
then
echo "你的成绩为$cj"
echo "你的成绩为合格"
else
echo "你的成绩为$cj"
echo "你的成绩不合格"
fi
case
格式
case WORD in [PATTERN [| PATTERN]…) COMMANDS ;;]… esac
read -p
case $num in
条件判断1)
esac
字符
* 任意长度任意字符
? 任意单个字符
[0-9] 指定范围内的任意单个字符
| 或者,如: a|b
例子
考试成绩
[root@localhost qqq]# bash 4.sh
请输入你的分数4
4 不及格
[root@localhost qqq]# cat 4.sh
#!/bin/bash
read -p "请输入你的分数" cj
case $cj in
100)
echo "$cj 你好棒!"
;;
[89][0-9])
echo "$cj 一般般吧,仍需努力"
;;
[67][0-9])
echo "$cj 及格"
;;
[0-9]|[1-5][0-9])
echo "$cj 不及格"
;;
*)
echo "输入有误"
esac
石头剪刀布
#!/bin/bash
m=`echo $[RANDOM%3+1]`
read -p "请输入 1.石头2.剪刀3.布:" h
if [ $m -eq $h ]
then
echo "打成平局"
bash $0
elif [ $h -eq 1 -a $m -eq 2 -o $h -eq 2 -a $m -eq 3 -o $h -eq 3 -a $m -eq 1 ]
then
echo "人类胜利"
else
echo 机器胜利
fi
#!/bin/bash
key=`echo $[RANDOM%3+1]`
read -p "请输入1包子 2剪子 3 锤子:" num
case $num in
1)
num="包子"
;;
2)
num="剪子"
;;
3)
num="锤子"
;;
*)
echo "你输错了!"
exit
;;
esac
case $key in
1)
key="包子"
;;
2)
key="剪子"
;;
3)
key="锤子"
;;
esac
if [ $num = "包子" -a $key = "锤子" -o $num = "剪子" -a $key = "包子" -o $num = "锤子" -a $key = "剪子" ]
then
echo 机器出的是$key
echo 你出的是$num
echo "人类胜利"
elif [ $num = $key ]
then
echo 机器出的是$key
echo 你出的是$num
echo "打成平局再来一次"
else
echo 机器出的是$key
echo 你出的是$num
echo "机器胜利"
fi
echo
echo -n 表示不换行输出
echo -e 表示输出转义符
常用的转义符
不换行显示
date
-d 你描述的日期,显示指定字符串所描述的时间,而非当前时间
%F 完整日期格式,等价于 %Y-%m-%d
cal 2023
seq
从1 开始 步长为2 到10 为止
从 20开始 步长为 -1 到1 为止
原文地址:https://blog.csdn.net/X2683933654/article/details/134538266
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.7code.cn/show_2974.html
如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除!