一,什么是shell脚本。
一个 shell 脚本就是一个包含一系列命令的文件。shell 读取这个文件,然后执行 文件中的所有命令,就好像这些命令已经直接被输入到了命令行中一样。
Shell 有些独特,因为它不仅是一个功能强大的命令行接口,也是一个脚本语言解释器。我们将会看到, 大多数能够在命令行中完成的任务也能够用脚本来实现,同样地,大多数能用脚本实现的操作也能够 在命令行中完成。另外shell里面变量是弱变量类型的,这就意味着我们可以在任何时候直接使用变量,而不用定义。
二,用shell脚本实现进度条
2.1 初始版本:
#!/bin/bash
i=0
str=""
arry=("\\" "|" "/" "-")
while [ $i -le 100 ]
do
let index=i%4
printf "[%-100s] %d %c\r" "$str" "$i" "${arry[$index]}"
sleep 0.1
let i=i+1
str+="#"
done
printf "\n"
arry是我们定义的数组,它用来交替显示{“\”,”|”,”/”,”-“} 这四个字符中的一个,由于“\”在Linux中含有特殊含义,所以需要用两个“\”,一个起转义作用。
i用来记录当前进度,从0-100,每次使str=str+”#”,while循环每次输出str,进度,及arry中的字符。
运行结果:
2.2 改进版
首先看一下运行结果:
此时运行将会以颜色显示,并且在百分之20,百分之45,百分之75及之上显示不同的颜色,即产生颜色交替。该功能是在打印的时候加上颜色选项实现的,而颜色的代号又是个变量,在不同的区间会有不同的选择。
以下为实现代码:
#!/bin/bash
i=0
str=""
arry=("\\" "|" "/" "-")
while [ $i -le 100 ]
do
let index=i%4
if [ $i -le 20 ]
then
let color=44
let bg=34
elif [ $i -le 45 ]
then
let color=43
let bg=33
elif [ $i -le 75 ]
then
let color=41
let bg=31
else
let color=42
let bg=32
fi
printf "\033[${color};${bg}m%-s\033[0m %d %c\r" "$str" "$i" "${arry[$index]}"
usleep 30000
let i=i+1
str+="#"
done
printf "\n"
与版本1不同之处便在我们在打印的时候加入了颜色属性,首先我们来学习一下如何在Linux中打出带有颜色的字体
文本终端的颜色可以使用“ANSI非常规字符序列”来生成。举例:
printf(“\033[字背景颜色;字体颜色m字符串\033[0m” );
示例:
printf(“\033[40;37 this will be colored\n\033[0m”);
echo -e “\033[40;37this will be colored\n\033[0m”
其中40,37分别代表字体背景颜色及字体颜色,在这里我们只需要将字体颜色与字体背景颜色选为相同的,便可以实现上图的功能。
以下为常用的颜色代号:
字背景颜色范围: 40--49 字颜色: 30--39
40: 黑 30: 黑
41: 红 31: 红
42: 绿 32: 绿
43: 黄 33: 黄
44: 蓝 34: 蓝
45: 紫 35: 紫
46: 深绿 36: 深绿
47: 白色 37: 白色