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脚本练习的主要内容,如果未能解决你的问题,请参考以下文章