shell编程

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
View Code

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语法!

未完待续........

注:这些题是在网上查找,经略微改编发布,如有侵犯,立即删除

原文地址:https://www.cnblogs.com/lanxiansen/p/10595530.html