Shell常用功能实现
Linux Shell常用小功能汇总实现
- Shell实现while循环
- Shell判断文件或文件夹是否存在
- Shell判断一个变量或输入参数是否为空
- Shell中等待一定时间或等待进程结束实现
- Shell脚本实现并行处理数据
- Shell脚本获取某个目录下(除去指定文件)的所有文件
- Shell脚本连接(拼接/合并)字符串
- Shell获取时间戳
- 后续ing…
- 更多请评论区留言(建议用GitHub的留言系统),可提供样例代码,或告诉需求,该文章不断汇总整合。
具体实现样例
Shell实现while循环
while 循环体
do
循环体
done
- 非死循环实现
注意:while循环条件中括号与内部内容之间留有空格
1
2
3
4
5
6
7# 循环输出0-10
i=0
while [ $i -le 10 ]
do
echo $i
i=$[$i+1]
done - 死循环实现
死循环while条件可直接用“:”,注意“:”两边有空格
当然也可以直接将循环条件变成恒为True的情况,比如下面两种
while [ "1" = "1" ]
或while test "1" = "1"
1
2
3
4
5
6
7i=0
while :
do
echo $i
i=$[$i+1]
sleep 2s
done
Shell判断文件或文件夹是否存在
更多判断条件见Shell脚本中和文件相关的判断符
- 文件是否存在判断
注意:if条件中括号与内部内容之间留有空格
1
2
3
4
5if [ -f "/home/filename" ];then
echo "文件已存在"
else
echo "文件不存在"
fi - 文件夹是否存在判断
注意:if条件中括号与内部内容之间留有空格
1
2
3
4
5if [ -d "/home/" ];then
echo "文件夹存在"
else
echo "文件夹不存在"
fi
Shell判断一个变量或输入参数是否为空
- 判断变量是否为空
变量从终端获取
1
2
3
4
5
6read -p "请输入:" varvalue
if [ ! -n "$varvalue" ] ;then
echo "未输入,变量为空"
else
echo "已输入,变量非空:$varvalue"
fi变量直接赋空
1
2
3
4
5
6varvalue=
if [ ! $varvalue ]; then
echo "变量为空"
else
echo "变量非空"
fi - 判断输入参数是否为空
1
2
3
4
5if [ ! -n "$1" ] ;then
echo "参数为空"
else
echo "参数非空:$1"
fi除以上方法外,还可以用如下判断条件判断
if test -z "$varvalue"
或if [ "$varvalue" = "" ]
Shell中等待一定时间或等待进程结束实现
等待一定时间
sleep支持的时间单位为 h(时),m(分),s(秒)
1
2
3
4sleep 3 # 不加单位默认是秒,等待3秒
sleep 1s # 等待1秒
sleep 1m # 等待1分
sleep 1h # 等待1小时等待进程或作业执行完毕
wait支持等待进程或作业执行完毕。
可通过jobs命令查看后台进行中的作业
1
2
3wait # 等待当前进程结束后执行
wait 1234 # 等待进程号为1234进程结束后执行
wait %1 # 等待作业标识号为1的作业结束后执行(作业标识号前必须添加备份号"%")
Shell脚本实现并行处理数据
- 并行实现思路之一
可通过后台运行符&和进程等待wait组合实现
1
2
3
4# 假设已经实现好了两个任务脚本1.sh和2.sh让这两个脚本并行执行。
./1.sh & # 执行任务1,不阻塞等待
./2.sh & # 执行任务2,不阻塞等待
wait # 等待子进程任务1,2执行结束(确保任务都执行完毕)
Shell脚本获取某个目录下(除去指定文件)的所有文件
- 获取某个目录下所有文件
方式一,使用通配符*
1
2
3
4for name in /etc/*
do
echo $name
done方式二,使用ls命令
1
2
3
4for name in `ls /etc/`
do
echo $name
done - 获取某个目录下扩展名固定的所有文件
1
2
3
4
5
6
7
8
9
10
11
12
13for name in /etc/*.conf # 获取etc目录下所有扩展名为.conf的文件
do
echo $name
done
```
- 获取某个目录下除去某些指定文件的所有文件
`利用ls或ls -a与grep -v命令组合`
`以下样例代码获取/etc/目录下的除去yum、yum.conf、c.txt三个文件的其余文件`
```bash
for name in `ls /etc/ | grep -v 'yum\|yum.conf\|c.txt'` # 注意字符串中的管道符|需要用反斜线进行转义\|
do
echo $name
done
Shell脚本连接(拼接/合并)字符串
- Shell脚本连接字符串
Shell字符串拼接不需要使用任何运算符,将两个字符串并排放在一起就能实现拼接
1
2
3
4
5
6
7
8
9
10
11
12
13
14string1="hello"
string2="word"
#===========#
str1=$string1$string2 #中间不能有空格,没有引号空格会被识别成终止符
str2="$string1 $string2" #被引号包围,中间可以有空格
str3=$string1": "$string2 #夹带其他字符串连接
str4="$string1: $string2" #同str3
str5="${string1}111: ${string2}222" #这种情况需要给变量名加上大括号
#===========#
echo $str1
echo $str2
echo $str3
echo $str4
echo $str5
Shell获取时间戳
- date更多用法见Linux系统date命令用法小记
1
2
3
4date +%s # 获取秒级时间戳
date +%s%3N # 获取毫秒级时间戳
date +%s%6N # 获取微秒级时间戳
date +%s%N # 获取纳秒级时间戳
评论