Shell脚本练习

Posted Richard_Chiang

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Shell脚本练习相关的知识,希望对你有一定的参考价值。

Shell脚本练习

1、请用shell脚本for,while,until这三种方式写出输出1到100的所有偶数的方法。

for

 #!/bin/bash
 for ((i=1;i<=100;i++))
 do
   a=$[ $i % 2 ]
   if [ $a = 0 ]
   then
     echo $i
   fi
 done

while

![题目11](C:\\Users\\jiangzemiao\\Pictures\\Saved Pictures\\Shell脚本阶段\\题目11.png)#!/bin/bash
i=0
while [[ i -le 100 ]]
do
  if [ $[$i%2] -eq 0 ]
  then
    echo $i
  fi
  let i++
done

until

#!/bin/bash
i=1
until ((i>100))
do
  if [ $[$i%2] -eq 0 ]
  then
    echo $i
  fi
  let i++
done


2、假设变量i=20 * 5,请用shell脚本格式写出4种方法输出 i 的值。

 #!/bin/bash
 i=$[20*5]
 echo $i
 echo "--------------------"
 i=$( expr 20 \\* 5 )
 echo $i
 echo "--------------------"
 i=$((20*5))
 echo $i
 echo "--------------------"
 let i=20*5
 echo $i


3、请通过在命令行中执行./output 20 30 输出20+30的值,脚本中使用sum()函数封装代码并通过调用sum函数返回结果,用2种方法返回结果。

 #!/bin/bash
 sum1 ()
   echo "第一个返回结果为$1"
   echo "第二个返回结果为$2"
     sum=$[$1+$2]
     echo $sum
 
   sum1 $1 $2
 echo "--------------------"
 sum2 ()
   echo "第一个返回结果为$1"
   echo "第二个返回结果为$2"
     return $[$1+$2]
 
   sum2 $1 $2
   echo $?


4先mkdir -p /root/bin/aa/bb/cc/dd ; touch /root/bin/aa/bb/cc/dd/abc.txt再用递归函数输出环境变量PATH所包含的所有目录以及其中的子目录和所有不可执行文件。

 #!/bin/bash
 wenjian() 
 for i in $1/*
 do
   if [ -d $i ];then
      echo "目录:$2$i"
      wenjian $i " $2"
   elif [ ! -x $i ] && [ -f $i ];then
      echo "不可执行文件:$2$i"
   fi
 done
 

 OLDIFS=$IFS
 IFS=:
 for a in $PATH
 do
   echo "子目录: $a"
   wenjian $a " "
 done
 IFS=$OLDIFS


5、请结合使用shell数组排序算法和Linux命令两种方式把 123.txt 文件中的数字按照降序排序输出在同一行当中,并要求没有重复数字。

cat 123.txt 
1 4 7 9 4
2 5 8 3 8
3 6 9 7 6

#!/bin/bash
a=0
for i in `awk print $0 123.txt`
do
  arr[$a]=$i
  let a++
done
shell ()
  echo "原数组的顺序为:$arr[*]"
  length=$#arr[*]
  for ((i=1; i<=$length; i++))
  do
    for ((j=0; j<$length-$i; j++))
    do
      first=$arr[$j]
      k=$j+1
      second=$arr[$k]
        if [ $first -lt $second ];then
          temp=$arr[$j]
          arr[$j]=$second
          arr[$k]=$temp
        fi
    done
done

shell $arr
arr=($(awk -v RS=  !a[$1]++ <<< $arr[@]))
echo "新数组的顺序为:"$arr[@]


6、假设 file.txt 内容如下,请在grep,egrep,sed,awk中至少2种命令输出有效的号码:987 456-1230和(123) 456-7890,要求至少要有一种方法使用正则表达式匹配完整的号码。

cat file.txt
987-123-5430
987 456-1230
(123) 456-7890

egrep

[root@localhost ~]# egrep "^(\\(?[0-9]3\\)?)[ ][456]3[-][0-9]4$" file.txt
987 456-1230
(123) 456-7890

awk

[root@localhost ~]# awk /^(\\(?[0-9]3\\)?)[ ][456]3[-][0-9]4$/print file.txt
987 456-1230
(123) 456-7890


以上是关于Shell脚本练习的主要内容,如果未能解决你的问题,请参考以下文章

shell脚本练习题

shell 脚本 片段

shell练习题

shell综合练习题(图文并茂代码清单)

shell脚本练习题

用于确保在任何给定时间仅运行一个 shell 脚本的 shell 片段 [重复]