【shell脚本】shell脚本的三个小练习

7 篇文章 0 订阅

1.利用shell脚本编写一个进度条

     先介绍一下shell中printf命令的使用方法,与C语言风格类似,只不过在shell中是一个命令,所以不能通过圆括号传参,所有的参数用双引号括起来,第一个参数是格式控制,与C一致,参数之间不能用逗号,像命令传参一样,用空格隔开。

    为了进度条能稍微美观一点,我们可以设置字体的颜色和背景色。在shell中,怎么做到呢?

 颜色是通过添加专用序列来选择的 -- 夹在 "\e["和 "m"之间的数字,第一个数字为前景颜色;第二个数字为背景颜色,颜色之间用分号隔开。 使用"\e[0m"序列将颜色重新设置为正常值。下面是不同数字所代表的颜色:


  设置前景色(字体颜色)
 "\e[30m"    灰色
 "\e[31m"    红色    
 "\e[32m"    绿色
"\e[33m"    黄色
 "\e[34m"    蓝色
 "\e[35m"    紫色
"\e[36m"    淡蓝色
"\e[37m"    白色     

   设置背景色

"\e[40m"    灰色

"\e[41m"    红色
 "\e[42m"    绿色
 "\e[43m"    黄色
 "\e[44m"    蓝色
 "\e[45m"    紫色
 "\e[46m"    淡蓝色
 "\e[47m"    白色


代码:

#!/bin/bash

i=0
str=""
arr=("\\" "|" "-" "/")

while [ KaTeX parse error: Undefined control sequence: \e at position 179: …hljs-string">"[\̲e̲[32;43;1m%-100s…{str}" i < / s p a n > " < / s p a n > < s p a n c l a s s = " h l j s − s t r i n g " > " < s p a n c l a s s = " h l j s − v a r i a b l e " > {i}</span>"</span> <span class="hljs-string">"<span class="hljs-variable"> i</span>"</span><spanclass="hljsstring">"<spanclass="hljsvariable">{arr[${index}]}”
sleep 0.1
let i++
str+="#"
done

效果图: 




2. 传入至少两个数字参数到脚本file,并计算出最大值,最小值,平均值。需要判断传入的数字是否足够,否则输出警告信息。平均值保留两位小数。

#!/bin/bash

if [ $# -eq 0 ];then
	echo "you must input at least 2 argv"
fi

max=$1
min= 1 < / s p a n > i = 0 s u m = 0 < s p a n c l a s s = " h l j s − k e y w o r d " > f o r < / s p a n > i < s p a n c l a s s = " h l j s − k e y w o r d " > i n < / s p a n > < s p a n c l a s s = " h l j s − v a r i a b l e " > 1</span> i=0 sum=0 <span class="hljs-keyword">for</span> i <span class="hljs-keyword">in</span> <span class="hljs-variable"> 1</span>i=0sum=0<spanclass="hljskeyword">for</span>i<spanclass="hljskeyword">in</span><spanclass="hljsvariable">@
do
if [ m a x < / s p a n > − l t < s p a n c l a s s = " h l j s − v a r i a b l e " > max</span> -lt <span class="hljs-variable"> max</span>lt<spanclass="hljsvariable">i ];then
let max=i
fi
if [ m i n < / s p a n > − g t < s p a n c l a s s = " h l j s − v a r i a b l e " > min</span> -gt <span class="hljs-variable"> min</span>gt<spanclass="hljsvariable">i ];then
let min=i
fi
let sum+=i
done

echo “max: m a x < / s p a n > " < / s p a n > < s p a n c l a s s = " h l j s − b u i l t i n " > e c h o < / s p a n > < s p a n c l a s s = " h l j s − s t r i n g " > " m i n : < s p a n c l a s s = " h l j s − v a r i a b l e " > {max}</span>"</span> <span class="hljs-built_in">echo</span> <span class="hljs-string">"min:<span class="hljs-variable"> max</span>"</span><spanclass="hljsbuiltin">echo</span><spanclass="hljsstring">"min:<spanclass="hljsvariable">{min}
echo “ibase=10; scale=2; s u m < / s p a n > / < s p a n c l a s s = " h l j s − v a r i a b l e " > sum</span>/<span class="hljs-variable"> sum</span>/<spanclass="hljsvariable"># | bc

需要解释一下的是平均值的计算,这里通过管道交给了计算器bc,ibase指定输入数字的进制数,scale指定小数点的位数。

3. 文件内容如下:

123abc456
456def123
567abc789
789def567
要求输出:
456ABC123
123DEF456
789ABC567
567DEF789
 


#!/bin/bash

echo "before"
cat charfile
echo "after"

while read line
do
[ ! -z KaTeX parse error: Expected 'EOF', got '&' at position 15: line</span> ] &̲amp;&amp;{ <sp…line | tr [:lower:] [:upper:] | sed -r ‘s/([0-9]{3})([A-Z]{3})([0-9]{3})/\3\2\1/’

}
done <charfile







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值