字符集

2020-12-22  本文已影响0人  慕知
1,算数运算符
# 整数运算
expr
$(())
$[]
let


[root@m01~]# let a++
[root@m01~]# echo $a
2

[root@m01~]# a=1
[root@m01~]# b=2
[root@m01~]# expr $a + $b
3
[root@m01~]# expr $(( a + b ))
3
[root@m01~]# expr $[ a + b ]
3
[root@m01~]# expr $[ $a + $b ]
3


注意:
乘法*有特殊意义,使用需要加上\

[root@m01~]# expr 2 * 6
expr: 语法错误

[root@m01~]# expr 2 \* 6
12

[root@m01~]# expr $(( a * b ))
6

#浮点运算
bc

[root@m01~]# yum install -y bc

# scale=3,保留3位小数点,当分子小于分母,值的0会省略
[root@m01~]# echo "scale=3;4/30" | bc
.133

[root@m01~]# echo "scale=3;4/2" | bc
2.000



------------------应用场景---------------

[root@m01~]# free
              total        used        free      shared  buff/cache   available
Mem:         995896      116276      785456       25016       94164      735600
Swap:       1048572        1544     1047028

#取值
[root@m01~]# free | awk 'NR==2{print $NF}'
735184
[root@m01~]# free | awk 'NR==2{print $2}'
995896

#赋值
[root@m01~]# total=`free | awk 'NR==2{print $2}'`

[root@m01~]# availble=`free | awk 'NR==2{print $NF}'`

#计算
[root@m01~]# echo "scale=2;$available / $total" | bc
.74
2,测试运算符
test 等同于 [ ]    ###注意 [ ] 里面字符旁加空格

# 测试目录是否存在
[root@m01~]# test -d /etc/; echo $?
0

#测试文件长度是否大于0
[root@m01~]# [ -s a.jz ];echo $?
0

#测试文件是否有执行权限  (可换成w或r权限测试)
[root@m01~]# [ -x a.jz ];echo $?
1


#测试文件是否是软连接
[root@m01~]# [ -L a.jz ];echo $?
1


[root@m01~]# man test
查看更多测试参数
# 查看字符串数量是否大于0

[root@m01~]# a=""
[root@m01~]# b="xy"

[root@m01~]# [ -n "$a" ];echo $?
1
[root@m01~]# [ -n "$b" ];echo $?
0

##    查看字符串数量是否为0   如上




# 查看字符串值是否相等
[root@m01~]# [ "asd" = "ssss" ];echo $?
1
[root@m01~]# [ "asd" = "asd" ];echo $?
0

##    != 查看字符串是否不想等;如上



# 并且关系

[root@m01~]# read -p "输入用户名:" name
输入用户名:zx
[root@m01~]# read -p "输入密码:" pwd
输入密码:123

[root@m01~]# [ "$name" = "zx" ] && [ "$pwd" = "123" ];echo $?
0
[root@m01~]# [ "$name" = "zx" -a "$pwd" = "111" ];echo $?
1

# 或者关系
[root@m01~]# [ "$name" = "zx" -o "$pwd" = "111" ];echo $?
0
[root@m01~]# [ "$name" = "zx" ] || [ "$pwd" = "123" ];echo $?
0



###字符串一定加上双引号!!!!!
[root@m01~]# [ "12" -eq "23" ];echo $?
1
[root@m01~]# [ "12" -lt "23" ];echo $?
0
[root@m01~]# [ "12" -ge "23" ];echo $?
1
[root@m01~]# [ "12" -ne "23" ];echo $?
0



# -eq 等于
# -gt 大于
# -ge 大于等于
# -lt 小于
# -le 小于等于
# ne 不等于


# 并且关系
[root@m01~]# [ "12" -gt "2" -a "6" -eq "6" ];echo $?
0
[root@m01~]# [ "12" -gt "2" ] && [ "6" -eq "6" ];echo $?
0


# 或者关系
[root@m01~]# [ "12" -gt "2" ] || [ "6" -eq "7" ];echo $?
0
[root@m01~]# [ "12" -gt "2" -o "6" -eq "6" ];echo $?
0
3,关系运算符(c语言风格)
[root@m01~]# (( 10==4 ));echo $?
1
[root@m01~]# (( 10>=4 ));echo $?
0
[root@m01~]# (( 10>4 && 4==4 ));echo $?
0

不可以使用-a 或者-o

4,赋值运算符(c语言风格)
[root@m01~]# a=2
[root@m01~]# ((a-=3))
[root@m01~]# echo $a
-1
#备注: 固定格式为((a加减乘除=需要操作的数字))

[root@m01~]# ((a-=10))
[root@m01~]# echo $a
2

[root@m01~]# ((a*=10))
[root@m01~]# echo $a
20

#  %取余数
[root@m01~]# x=10
[root@m01~]# ((x%=3))
[root@m01~]# echo $x
1

5,补充[[ ]]
1, 一般用法
[root@m01~]# [[ "abc" = "scc" ]];echo $?
1

2, 正则表达式用法
[root@m01~]# echo $USER
root
[root@m01~]# [[ "$USER" =~ ^ro ]];echo $?
0

#正则表达式一定不要加引号


------- 使用场景---------

例1:

[root@m01~]# vim /script/zx.sh
#!/bin/bash
#参数只能是一个,不然会提示"只能输入一个参数" 
[ $# -ne 1 ] && echo "只能输入一个参数" && exit
#第一个参数必须是数字,不然会提示"只能输入数字" 
[[ ! $1 =~ ^[0-9]+(\.[0-9])?$ ]] && echo "只能输入数字" && exit
#符合以上条件,提示"okkkkk"
echo "okkkkk"

[root@m01~]# chmod +x /script/zx.sh
[root@m01~]# /script/zx.sh  2223  eeee
只能输入一个参数
[root@m01~]# /script/zx.sh   eeee
只能输入数字
[root@m01~]# /script/zx.sh  333
okkkkk
[root@m01~]# /script/zx.sh  44.2
okkkkk




例2:
[root@m01~]# vim /script/zz.sh
#!/bin/bash
[ $# -ne 2 ] && echo "必须输入两个参数" && exit
[[ ! $1 =~ ^[0-9]+$ ]] && echo "第一个参数必须是整数" && exit
[[ ! $2 =~ ^[0-9]+$ ]] && echo "第二个参数也要是整数" && exit
[ $1 -eq $2 ] && echo "值相等"
[ $1 -gt $2 ] && echo "第一个值大"
[ $1 -lt $2 ] && echo "第二个值大"


[root@m01~]# chmod +x /script/zz.sh

[root@m01~]# /script/zz.sh 11
必须输入两个参数
[root@m01~]# /script/zz.sh ee 33
第一个参数必须是数字
[root@m01~]# /script/zz.sh 11 rrr
第二个参数也要是数字
[root@m01~]# vim /script/zz.sh
[root@m01~]# /script/zz.sh 11 33
第二个值大
[root@m01~]# /script/zz.sh 11 1
第一个值大

1,&& 优先级大于 || , 先执行两边的&& 再执行||

root@m01~]# ((8>6)) && ((9<10)) || ((1>0)) && ((4==3))
[root@m01~]# echo $?
1
[root@m01~]# ((8>6)) && ((9<10)) || ((1>0)) && ((4>3))
[root@m01~]# echo $?
0




2,[^0-9] 与 [!1-9] 都是取反的意思
[root@m01~/ab]# ls
1.txt  4.txt  7.txt  aa.txt  a.txt

[root@m01~/ab]# ls [^0-9].txt
a.txt
[root@m01~/ab]# ls [!0-9].txt
a.txt


3, &放在脚本最后,&前面的内容加上( ),代表放在后台执行,执行效率快
[root@m01~]# vim /script/11.sh
#!/bin/bash
(ping -c1 10.0.0.7 &> /dev/null
[ $? -eq 0 ] && echo "10.0.0.7 is ok" || echo "10.0.0.7 is down" ) &
(ping -c1 10.0.0.8 &> /dev/null
[ $? -eq 0 ] && echo "10.0.0.8 is ok" || echo "10.0.0.8 is down" ) 

[root@m01~]# chmod +x /script/11.sh
[root@m01~]# /script/11.sh
10.0.0.8 is ok
10.0.0.7 is ok





4.
control +z  把任务放在后台执行
jobs查看后台任务
fg +%n后台任务调到前台执行

[root@m01~]# ping 10.0.0.7
PING 10.0.0.7 (10.0.0.7) 56(84) bytes of data.
64 bytes from 10.0.0.7: icmp_seq=1 ttl=64 time=0.439 ms
64 bytes from 10.0.0.7: icmp_seq=2 ttl=64 time=0.642 ms
64 bytes from 10.0.0.7: icmp_seq=3 ttl=64 time=0.573 ms
^Z
[1]+  已停止               ping 10.0.0.7

[root@m01~]# jobs
[1]+  已停止               ping 10.0.0.7
[root@m01~]# fg %1
ping 10.0.0.7
64 bytes from 10.0.0.7: icmp_seq=3 ttl=64 time=0.299 ms
64 bytes from 10.0.0.7: icmp_seq=4 ttl=64 time=0.681 ms
... ...
上一篇 下一篇

猜你喜欢

热点阅读