临时被安排写一个脚本。把这次用到的相关语句记录一下。
1、case语句.
用于对脚本输入参数进行检验。
注意shell内的case语句与C语言中不同,只会匹配第一个符合的条件。而C语言中不加break,就会一直往下运行。
if内需要空格,并且等号用单个等号即可。
#!/bin/bash
function parameter_judgement()
{
case $# in
0)
echo "Please run this shell with parameters again"
echo " -mode to select mode. You can use master or slave"
echo " For example"
echo " sh test.sh -mode master"
exit 1
;;
2)
if [ "$1" = "-mode" ]; then
echo "mode = $2"
else
echo "wrong parameters"
exit 1
fi
;;
*)
echo "wrong parameters"
exit 1
esac
}
parameter_judgement $1 $2
最后调用函数时,一定要记得传参,用几个传几个。我本身脚本是用了8个的。此处简略为2个。
运行结果,带参数与不带参数的。
2、字符串截取
#!/bin/bash
LOCAL_IP="192.168.120.3"
endIp=${LOCAL_IP##*.}
echo $endIp
运行结果为3。
该语句是为了截取最后一个"."右侧的内容。
切记大括号内的变量名前面不需要$符号。在这里踩了一次坑。
其他的我暂时没用到,但是查到了,就先记一下。
#!/bin/bash
var="192.168.120.3"
# 1、#号截取, 表示获取第一个.之后的字符串。(此条包括以下截取均不包括.本身)
echo ${var#*.}
# 2、## 号截取,获取最后一个.之后的字符串。
echo ${var##*.}
# 3、 %号截取,获取最后一个.之前的字符串。
echo ${var%.*}
# 4. %% 号截取,获取第一个.左侧的字符串。
echo ${var%%.*}
# 5. 获取前五个字符
echo ${var:0:5}
# 6. 获取从左边第4个字符开始,一直到结束。
echo ${var:3}
# 7. 获取从右边第4个字符开始的3个字符
echo ${var:0-4:3}
# 8. 从右边第7个字符开始,一直到结束。
echo ${var:0-7}
运行结果为
168.120.3
3
192.168.120
192
192.1
.168.120.3
20.
8.120.3
3、bc进制转化
#!/bin/bash
endIp=101
hexIp=$(echo "obase=16;ibase=10;$endIp"|bc)
echo $hexIp
此处为10进制转16禁止。其他可以类比。
主要是获取bc执行结果,尝试过很多写法,比如$("obase=16;ibase=10;$endIp"|bc)
,或者用反引号取值"obase=16;ibase=10;$endIp"|bc
之类的,都不对,没想到要把echo也带上。
4、sed进行文件的修改
#!/bin/bash
MASTER_IP="192.168.120.3"
masterIpLine=" \"MASTER_IP\" : \"$MASTER_IP:40010\","
sed -i "9c\\$masterIpLine" test.json
其中包含:
(1)sed命令中参数内带有变量引用的处理。
sed后的参数,一般查到的教程中使用单引号,但是当需要替换的语句中含有变量时,需要更改为双引号,然后在语句本身的“以及取值所用的$之前加"\"进行转义。
(2)sed在用c参数进行替换时,只会把替换之后的内容进行输出,而并没有直接写入文件中。因此需要增加-i参数,讲改动写入文件中。