shell 字符串表达式

字符串表达式

字符串表达式介绍

注意:大写的注意,在shell脚本中所有变量的调用,请一定加上双引号,尤其是和字符串相关的,千言万语汇成一句话"加双引号"

字符串表达式

-n 判断字符串是否为空
有值为真 没有报错
非空就成立
[root@web02 ~]# test -n "$abc"
[root@web02 ~]# echo $?
1
[root@web02 ~]# abc=123
[root@web02 ~]# test -n "$abc"
[root@web02 ~]# echo $?
0

-z 无值为真
[root@web02 ~]# test -z "$abcd" && echo '字符串为空' || echo '字符串不为空'
字符串为空
[root@web02 ~]# abcd=123
[root@web02 ~]# test -z "$abcd" && echo '字符串为空' || echo '字符串不为空'
字符串不为空

"str1" = "str2"
[root@web02 test]# test 'abc' = 'abc' && echo '字符相等' || echo '字符不等'
字符相等
[root@web02 test]# test 'abc' = 'abz' && echo '字符相等' || echo '字符不等'
字符不等

"str1" != "str2"
[root@web02 test]# test 'abc' != 'abz' && echo '字符不等' || echo '字符相等'
字符不等
[root@web02 test]# test 'abc' != 'abc' && echo '字符不等' || echo '字符相等'
字符相等
表达式 含义
-n 非空则成立(有值就为真)
-z 空则成立(无值就为真)
"str1" = "str2" 等号左边字符串与右边字符串相等则成立
"str1" != "str2" 等号左边字符串与右边字符串不等则成立

整数表达式

表达式 含义 test举例 [[]]举例
-eq equal 等于 test 2 -eq 2 [[ 2 -eq 2 ]]
-ne not equal 不等于 test 2 -ne 2 [[ 2 != 2 ]]
-gt great than 大于 test 2 -gt 2 [[ 2 > 2 ]]
-ge great equal 大于等于 test 2 -ge 2 [[ 2 >= 2 ]]
-lt less than 小于 test 2 -lt 2 [[ 2 < 2 ]]
-le less equal 小于等于 test 2 -le 2 [[ 2 <= 2 ]]
[root@web02 test]# [ 2 > 1 ] && echo '成功' || echo '失败'
成功

[root@web02 test]# [[ 2 >= 1 ]] && echo '成功' || echo '失败'
bash: syntax error in conditional expression
bash: syntax error near `1'

# 单括号有时候会把>识别为重定向
[root@web02 test]# [ $age > 20 ] && echo '成功' || echo '失败'
失败
[root@web02 test]# age=20
[root@web02 test]# [ $age \> 10 ] && echo '成功' || echo '失败'
成功
[root@web02 test]# ll
total 8
-rw-r--r-- 1 root root 0 Jun 28 11:22 1
-rw-r--r-- 1 root root 0 Jun 28 11:25 20
-rw-r--r-- 1 root root 670 Jun 28 11:00 jsq.sh
-rw-r--r-- 1 root root 487 Jun 28 10:22 mxjsq.sh

[root@web02 test]# [ $age \> 10 ] && echo '成功' || echo '失败'
成功
[root@web02 test]# [ $age \> 3 ] && echo '成功' || echo '失败'
失败
[root@web02 test]# [ $age \> 10 ] && echo '成功' || echo '失败'
成功

[root@web02 test]# seq 10
1
2
3
4
5
6
7
8
9
10
[root@web02 test]# seq 10 | sort
1
10
2
3
4
5
6
7
8
9
[root@web02 test]# [ $age -gt 10 ] && echo '成功' || echo '失败'
失败

[[]]的成员运算

=~:成员运算
# 前面的值包不包含后面的输入
[root@web02 ~]# name=dd
[root@web02 ~]# [[ $name =~ 'd' ]] && echo '包含' || echo '不包含' 
包含
[root@web02 ~]# [[ $name =~ '1' ]] && echo '包含' || echo '不包含' 
不包含
[root@web02 test]# [[ $name =~ 'do' ]] && echo '包含' || echo '不包含'
包含
[root@web02 test]# [[ $name =~ [0-9] ]] && echo '包含' || echo '不包含'
不包含
[root@web02 test]# [[ $name =~ [a-z] ]] && echo '包含' || echo '不包含'
包含
[root@web02 test]# [[ $name =~ ^[a-z] ]] && echo '包含' || echo '不包含'
包含
[root@web02 test]# [[ $name =~ [a-z]$ ]] && echo '包含' || echo '不包含'
包含
[root@web02 test]# [[ $name =~ ^[a-z]$ ]] && echo '包含' || echo '不包含'
不包含
[root@web02 test]# [[ $name =~ ^[a-z]+$ ]] && echo '包含' || echo '不包含'
包含
[root@web02 test]# [[ $name =~ 'g'$ ]] && echo '包含' || echo '不包含'
包含
[root@web02 test]# [[ $name =~ 'd'$ ]] && echo '包含' || echo '不包含'
不包含

逻辑运算表达式

&&
||
!
[ $num -eq 0 -a $num2 -eq 3 ]
[ $num -eq 0 -a $num2 -eq 3 ]

and条件

只有都为真,条件才为真,条件中有任何一个为假,那么结果就是假。

逻辑符号 条件1 条件2 结果
-a

or条件

只要有一个为真,结果就是真,除非两个都为假,结果才是假。

逻辑符号 条件1 条件2 结果
-o

企业面试题

命令行中输入一个数字,如果数字是1,则输出1,如果是2则输出2,既不是1也不是2则显示脚本使用方法,并退出程序

#!/bin/bash
is_num(){
re='^[0-9]+$'
if ! [[ $1 =~ $re ]];then
        return 1
fi
        return 0
}
read -p '请输入一个数字:' u
if ! is_num "$u"; then
        echo "输入无效,请输入整数:1或2"
        exit 1
fi

if
[ $u -eq 1 ];then
        echo '1'
elif
[ $u -eq 2 ];then
        echo '2'
else
        echo '请输入正确的内容:1或2'
fi
#!/bin/bash
num=$1
if [ $num -eq 1 -o $num -eq 2 ];then
    echo $num
else
    echo "Usage: $0 {1|2}"
fi

使用read进行传参,实现两个整数比较大小,并将结果打印到屏幕。

#!/bin/bash
is_num(){
re='^[0-9]+$'
if ! [[ $1 =~ $re ]];then
        return 1
fi
        return 0
}

read -p '请输入第一个数字:' u
if ! is_num "$u"; then
        echo "输入无效,请输入数字"
        exit 1
fi
read -p '请输入第二个数字:' g
if ! is_num "$g"; then
        echo "输入无效,请输入数字"
        exit 1
fi

if [ $u -gt $g ];then
        echo "$u 大于 $g"
elif [ $u -eq $g ];then
        echo "$u 等于 $g"
else
        echo "$u 小于 $g"
fi
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇