shell脚本编写小测试1
Posted 老张学coding
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了shell脚本编写小测试1相关的知识,希望对你有一定的参考价值。
1、请用shell脚本格式写出至少3种输出1到100的所有偶数的方法。
for
代码1:
#输入1到100的所有偶数
for ((i=1;i<=100;i++))
do
if [ $[$i%2] -eq 0 ];then
echo $i
fi
done
代码2:
#!/bin/bash
for i in {2..100..2}
do
echo $i
done
代码3:
#!/bin/bash
for i in `seq 2 2 100`
do
echo $i
done
代码4:
#!/bin/bash
for((i=2;i<=100;i+=2))
do
echo $i
done
运行结果截图
while
代码1
#! /bin/bash
#输入1到100的所有偶数
i=1
while [ $i -le 100 ]
do
if [ $[$i%2] -eq 0 ];then
echo $i
fi
let i++
done
代码2
#! /bin/bash
#输入1到100的所有偶数
i=2
while [ $i -le 100 ]
do
if [ $[$i%2] -eq 0 ];then
echo $i
fi
let i++
done
与上面的进行比较
代码1
#! /bin/bash
#输入1到100的所有偶数
i=1
while [ $i -le 100 ]
do
let i++
if [ $[$i%2] -eq 0 ];then
echo $i
fi
# let i++
done
运行结果
代码2
#! /bin/bash
#输入1到100的所有偶数
i=2
while [ $i -le 100 ]
do
let i++
if [ $[$i%2] -eq 0 ];then
echo $i
fi
# let i++
done
运行截图
until
代码
#!/bin/bash
i=0
until ((i>=100))
do
let i+=2
echo $i
done
2、假设变量i=20 * 5,请用shell脚本格式写出至少4种方法输出 i 的值。
代码
#!/bin/bash
#这里用了多种方法,运行脚本为了辨别输出,用其他变量表示
#法1
a=$(expr 20 \\* 5)
echo "a的值是$a"
#法2
b=$((20*5))
echo "b的值是$b"
#法3
c=$[20*5]
echo "c的值是$c"
#法4
let d=20*5
echo "d的值是$d"
运行截图
3、请通过在命令行中执行./output 20 30 输出20+30的值,脚本中使用sum()函数封装代码并通过调用sum函数返回结果。
代码
#!/bin/bash
sum(){
sum=$(($1+$2))
return $sum
}
sum $1 $2
echo $?
运行结果
代码2
#!/bin/bash
sum(){
sum=$(($1+$2))
echo $sum
}
result=`sum $1 $2`
echo $result
运行结果
###4、请用递归函数输出PATH路径目录下的所有子目录和不可执行文件。
#!/bin/bash
list_files() {
for f in $1/*
do
if [ -d $f ];then
echo "子目录:$2$f"
list_files "$f" " $2"
elif [ ! -x $f ] && [ -f $f ];then
echo "文件:$2$f"
fi
done
}
OLDIFS=$IFS
IFS=':'
for i in $PATH
do
echo "目录:$i"
list_files $i " "
done
IFS=$OLDIFS
运行截图
5、请结合使用排序方法把 123.txt 文件中的数字按照降序排序输出在一行当中,并要求没有重复数字。
代码
[root@localhost 88shell]# cat 5.txt
1 4 7 9 3
2 5 8 3 8
3 6 9 7 6
#!/bin/bash
#请结合使用shell数组排序算法的方式把 123.txt 文件中的数字按照降序排序输出在同一行当中,并要求没有重复数字
#转数组
a=0
for i in `awk '{print $0}' 5.txt`
do
arr[$a]=$i
let a++
done
echo "转换数组arr为:${arr[*]}"
#排序(降序)
maopao (){
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
echo "排序后新的数组的顺序为:${arr[*]}"
}
maopao $arr #调用函数
#去重
arr=($(awk -v RS=' ' '!a[$1]++' <<< ${arr[@]}))
echo "去重后:"${arr[@]}
运行截图
6、假设 file.txt 内容如下,请用shell脚本格式至少2种方法输出有效的号码:987 456-1230和(123) 456-7890,要求至少要有一种方法使用正则表达式匹配完整的号码。
[root@localhost 88shell]# cat file.txt
987-123-4567
987 456-1230
(123) 456-7890
[root@localhost 88shell]# awk '/^(\\(?[0-9]{3}\\)? )[0-9]{3}-([0-9]{4})$/{print}' file.txt
987 456-1230
(123) 456-7890
[root@localhost 88shell]# sed -nr /'^(\\(?[0-9]{3}\\)? )[0-9]{3}-([0-9]{4})$'/p file.txt
987 456-1230
(123) 456-7890
[root@localhost 88shell]# egrep '^(\\(?[0-9]{3}\\)? )[0-9]{3}-([0-9]{4})$' file.txt
987 456-1230
(123) 456-7890
代码运行
以上是关于shell脚本编写小测试1的主要内容,如果未能解决你的问题,请参考以下文章