shell脚本的一些技巧

获取输入参数个数

如果脚本需要入参,那么一开始一般会对参数做一个简单校验。$#即是入参个数

shell脚本获取目录下所有文件

1
2
3
4
for file in `ls | grep -E '*.jar|*.war'`
do
echo $file
done

ls之后使用通道grep命令可以使用正则过滤出所需要文件

对文件名处理

假如一个文件名 test.jar 如何获取 test 以及 jar 这两部分?

1
2
3
4
5
file="test.jar"

prefix=${file%%.*}

suffix=${file#*.}

只需要以.为分隔符。prefix就是删掉最左边一个.右边所有的。

${file%%.*}中 %%意思是 从右边数,最后一个遇到.,然后删除所有.右边的

同样 # 表示从左边算起,但是一个#表示,从左边算起的第一个,并且删除左边的内容。也就得到了后缀

这样总结下来,# 从左边, %从右边,单个表示第一个,两个表示最后一个,中间为分隔符,*在那边,那边就删除

获取其他shell文件的退出值

有时,我们需要调用之前写好的shell文件,如何获取shell文件的exit值呢?

exit值会存储在#?中,我们直接执行shell文件之后,取这个值即可

1
2
3
4
5
./test.sh 1111

if [ #? -eq 0 ] ; then
## do you staff
fi

expect 命令 实现ssh登录

1
2
3
4
spawn ssh xx@xxxxxxxx
expect "password: "
send "your-password\r"
interact

expect 脚本获取 入参

1
2
3

set command [lindex $argv 0]
## set <param> [lindex $argv <param index>]

expect 根据输出值判断

1
2
3
4
5
6
7
8
9
10
11
expect {
"yes" {
set val 1
}

"no" {
set val 0
}


}