shell编程基础练习
1、使用for循环在/tmp目录下生成10个文件
要求:
(1)每个文件要以.html结尾的
(2)每个文件名的长度必须是固定字符串,且长度为10个字符
(3)10个字符必须是小写的26个字母,且每个字母必须是随机生成的
解题:
[root@oldboy ~]# vim randc.sh #!/bin/bash declare -a char=("a" "b" "c" "d" "e" "f" "g" "h" "i" "j" "k" "l" "m" "n" "o" "p" "q" "r" "s" "t" "u" "v" "w" "x" "y" "z") declare -i num=10 function generator(){ local n=10 local string local ele for ((i=0;i<n;i++));do ele=${char[$[$RANDOM%26]]} string=$(echo "$ele$string") done echo $string } function main(){ local n=10 for((i=0;i<n;i++));do str=$(generator) if [ $? -eq 0 ];then touch "${str}.html" fi done } main
2、随机生成10个整数,使用冒泡排序法进行排序
解题:
#!/bin/bash declare -a arr for ((i=0;i<10;i++));do let arr[$i]=$RANDOM done for ((i=0;i<${#arr[*]};i++));do echo ${arr[$i]} done echo "-----------------------------" function change(){ local temp=0 temp=${arr[$1]} let arr[$1]=${arr[$2]} let arr[$2]=$temp } function sort(){ for((i=0;i<$[${#arr[*]}-1];i++));do for((j=0;j<$[${#arr[*]}-$i-1];j++));do if [ ${arr[$j]} -gt ${arr[$[$j+1]]} ];then change $j $[$j+1] fi done done } sort for ((i=0;i<${#arr[*]};i++));do echo ${arr[$i]} done
运行结果
[root@oldboy ~]# bash sort.sh
1409
26330
13163
23802
17282
15310
31993
28608
23552
10180
-----------------------------
1409
10180
13163
15310
17282
23552
23802
26330
28608
31993
3、对 3, 1, 8, 4, 2 ,9, 6,使用插入排序法进行排序
解答:
[root@oldboy ~]# vim insertSort.sh #!/bin/bash declare -a arr=(3 1 8 4 2 9 6) for((i=0;i<$[${#arr[*]}-1];i++));do echo "${arr[$i]}" done echo "-------------------------" function insertSort(){ for ((i=1;i<$[${#arr[*]}-1];i++));do local preIndex=$[$i-1] local current=${arr[$i]} while [ $preIndex -ge 0 -a ${arr[$preIndex]} -gt $current ];do let arr[$[$preIndex+1]]=arr[$preIndex] let preIndex-- done let arr[$[$preIndex+1]]=$current done } insertSort for((i=0;i<$[${#arr[*]}-1];i++));do echo "${arr[$i]}" done
运行结果
[root@oldboy ~]# bash insertSort.sh
3
1
8
4
2
9
-------------------------
1
2
3
4
8
9
4、随机生成10个随机数,使用选择排序法进行排序
解答:
[root@oldboy ~]# vim choseSort.sh #!/bin/bash declare -a arr for ((i=0;i<10;i++));do let arr[$i]=$RANDOM done for ((i=0;i<${#arr[*]};i++));do echo ${arr[$i]} done echo "-------------------------" function change(){ local temp=0 let temp=arr[$1] let arr[$1]=arr[$2] let arr[$2]=$temp } function choseSort(){ for((i=0;i<${#arr[*]};i++));do for((j=$[$i+1];j<${#arr[*]};j++));do if [ ${arr[$i]} -gt ${arr[$j]} ];then change $i $j fi done done } choseSort for ((i=0;i<${#arr[*]};i++));do echo ${arr[$i]} done [root@oldboy ~]# bash choseSort.sh 30933 31066 15774 21855 20877 1454 31761 19611 32409 6421 ------------------------- 1454 6421 15774 19611 20877 21855 30933 31066 31761 32409
5、判断一个字符串是否是回文
解答:
echo "aabcbaa" | gawk -v FS='' 'BENGIN{declare -a arr}{ #将一个字符串存入数组,再一个一个判断 i=0; while(i<NF){ i++; arr[i-1]=$i } } END{ flag=0; len=int(length(arr)/2); #gawk关于整数除以一个不能整除的数之后的值是一个小数,使用gawk内置函数int()转换了一下 for(i=0;i<length(arr)-1;i++){ if(i==len){ break }; if(arr[i]!=arr[length(arr)-1-i]){ flag=1; break } }; if(flag==0){ print "yes" }else{ print "no" } }'
注意:上述代码使用gawk实现的,并不是bash脚本实现。同时把代码格式化了一下,验证的时候注意遵守gawk语法!
未完待续........
注:这些题是在网上查找,经略微改编发布,如有侵犯,立即删除