Linux命令行与shell脚本
这里我们简单记录一下常见的Linux命令行与Shell脚本。
1. shell算术运算
这里主要有以下四种方法:
(1) 使用expr外部程式
[root@localhost test-src]# r=`expr 2 + 3` //注意操作数和运算符之间要有空白 [root@localhost test-src]# echo $r 5 [root@localhost test-src]# x=`expr 4 \* 5` [root@localhost test-src]# echo $x 20 [root@localhost test-src]# y=`expr \( 5 - 3 \) \* 3 + 1` [root@localhost test-src]# echo $y 7
(2) 使用使用 $(())
[root@localhost test-src]# a=$((1+1)) //这里数与运算符之间没有格式要求 [root@localhost test-src]# echo $a 2 [root@localhost test-src]# b=$(((2+2)*3)) [root@localhost test-src]# echo $b 12
(3) 使用$[]
[root@localhost test-src]# a=$[2+3] //这里数与运算符之间没有格式要求 [root@localhost test-src]# echo $a 5 [root@localhost test-src]# b=$[ 5 + 6 ] [root@localhost test-src]# echo $b 11
(4) 使用let命令
[root@localhost test-src]# n=20 [root@localhost test-src]# let n=n+1 [root@localhost test-src]# echo $n 21
2. shell字符串处理的掐头去尾法则
#
表示掐头, %
表示去尾.(助记: 键盘的排列上,# 在前面, %在后面)
单个#
或%
表示最小匹配,双个#
或%
表示最大匹配。也就是说,当匹配有多种方案的时候,选择匹配最大程度还是最小长度。
例1:
[root@localhost test-src]# workspace=/home/user/test.txt
(下面%/*最小匹配会去除/test.txt)
[root@localhost test-src]# fullpath=${workspace%/*}
[root@localhost test-src]# echo $fullpath
/home/user
(而%%/*会去除最长字符串)
[root@localhost test-src]# base=${workspace%%/*}
[root@localhost test-src]# echo $base //整个字符串都被去除了
(下面掐掉fullpath头部)
[root@localhost test-src]# name=${workspace#*"${fullpath}"/}
[root@localhost test-src]# echo $name
test.txt
(下面对比一下最小匹配与最大匹配)
[root@localhost test-src]# test1=${workspace#*/}
[root@localhost test-src]# echo $test1
home/user/test.txt
[root@localhost test-src]# test2=${workspace##*/}
[root@localhost test-src]# echo $test2
test.txt
例2:
我们有如下文件people.txt:
{"usertag":{"tag":"支配欲强、有责任感","name":"zhangsan 张三","deptname":"集团职能|Headquarter of Group"},"userno":"1001"}
{"usertag":{"tag":"精力旺盛、不服输","name":"lisi 李四","deptname":"集团职能|Headquarter of Group"},"userno":"1002"}
{"usertag":{"tag":"性情天真、热情奔放","name":"wangwu 王五","deptname":"集团职能|Headquarter of Group"},"userno":"1003"}
现在要将其userno这一列取出。则可以用如下命令行来完成:
# cat people.txt | while read line; do str1=${line##*\"userno\"}; str2=${str1#*\"}; usrno=${str2%%\"*};echo $usrno;done
1001
1002
1003
下面我们演示一下各个步骤的打印输出:
# cat people.txt | while read line; do str1=${line##*\"userno\"};echo $str1;done
:"1001"}
:"1002"}
:"1003"}
# cat people.txt | while read line; do str1=${line##*\"userno\"}; str2=${str1#*\"}; echo $str2;done
1001"}
1002"}
1003"}
# cat people.txt | while read line; do str1=${line##*\"userno\"}; str2=${str1#*\"}; usrno=${str2%%\"*}; echo $usrno;done
1001
1002
1003