Shell命令
1.read命令
从键盘读入数据,赋给变量
read 变量名
read -p "提示信息:"变量名
read -t 5 -p "提示信息:"变量名 超时5s,自动退出
例1:
[root@node1 ~]# vim read.sh
#!/bin/sh
read A B C
echo "the first parameter is $A"
echo "the second parameter is $B"
echo "the third parameter is $C"
[root@node1 ~]# sh read.sh
1 2 3
the first parameter is 1
the second parameter is 2
the third parameter is 3
[root@node1 ~]# sh -x read.sh
+ read A B C
4 5 6
+ echo 'the first parameter is 4'
the first parameter is 4
+ echo 'the second parameter is 5'
the second parameter is 5
+ echo 'the third parameter is 6'
the third parameter is 6
注:sh加上-x选项可以显示脚本执行过程
2.expr命令
Shell变量的算术运算:
expr命令:对整数型变量进行算术运算
例如:(注意运算符号左右都有空格)
expr 3 + 5 相当于或 echo $[5+3]
expr $var1 - 5
expr $var1 / $var2
expr $var3 \* 10
复杂的运算:
expr `expr 5 + 7` /$var4
相当于(5+7)/var4
将运算结果赋予变量:
var4=`expr $var1 / $var2`
例1:
[root@node1 ~]# vim expr.sh
#!/bin/sh
a=10
b=20
c=30
value1=`expr $a + $b + $c`
echo "The value of value1 is $value1"
value2=`expr $c / $b`
echo "The value of value2 is $value2"
value3=`expr $c \* $b`
echo "The value of value3 is $value3"
value4=`expr $a + $c / $b`
echo "The value of value4 is $value4"
[root@node1 ~]# sh expr.sh
The value of value1 is 60
The value of value2 is 1
The value of value3 is 600
The value of value4 is 11
脚本执行过程:
[root@node1 ~]# sh -x expr.sh
+ a=10
+ b=20
+ c=30
++ expr 10 + 20 + 30
+ value1=60
+ echo 'The value of value1 is 60'
The value of value1 is 60
++ expr 30 / 20
+ value2=1
+ echo 'The value of value2 is 1'
The value of value2 is 1
++ expr 30 '*' 20
+ value3=600
+ echo 'The value of value3 is 600'
The value of value3 is 600
++ expr 10 + 30 / 20
+ value4=11
+ echo 'The value of value4 is 11'
The value of value4 is 11
3.字符串处理(切片、截取、替换等)
例1:
[root@node1 ~]# man="I am a man"
[root@node1 ~]# echo $man
I am a man
输出字符串的个数
[root@node1 ~]# echo ${#man}
10
[root@node1 ~]# echo ${man} | wc -L
10
[root@node1 ~]# echo ${man} | awk '{print length}'
10
[root@node1 ~]# expr length "$man"
10
输出字符串第1个字符之后的内容
[root@node1 ~]# echo ${man:1}
am a man
输出字符串第2个字符之后2个字符的内容
[root@node1 ~]# echo ${man:2:2}
am
例2:
[root@node1 ~]# url=www.sina.com.cn
[root@node1 ~]# echo $url
www.sina.com.cn
显示字符串第1个分隔符后的内容
[root@node1 ~]# echo ${url#*.} #从左往右看,所以是*.
sina.com.cn
显示字符串最后1个分隔符后的内容
[root@node1 ~]# echo ${url##*.}
cn
显示字符串最后1个分隔符前的内容
[root@node1 ~]# echo ${url%.*} #从右往左看,所以是.*
www.sina.com
显示字符串第1个分隔符前的内容
[root@node1 ~]# echo ${url%%.*}
www
总结,从左往右删用“#”,从右往左删用“%”
字符串内容替换
[root@node1 ~]# echo ${url/sina/baidu}
www.baidu.com.cn
贪婪匹配
[root@node1 ~]# echo ${url/c/d}
www.sina.dom.cn
[root@node1 ~]# echo ${url//c/d}
www.sina.dom.dn
4.变量自增
i++ 先使用i的值,再赋值计算(i+1)
++i 先赋值计算(i+1),再使用i的值(此时值为i+1)
例1:
[root@node1 ~]# i=1
[root@node1 ~]# let i++
[root@node1 ~]# let i++
[root@node1 ~]# echo $i
3
5.小数运算
[root@node1 ~]# echo 2*4 | bc
8
[root@node1 ~]# echo 2*4.6 | bc
9.2
[root@node1 ~]# echo 3 5 | awk '{print $1/$2}'
0.6