题目
提示:没有基础请先看看基础部分的讲解,否则看不懂
1,编写函数,实现判断是否无位置参数,如无参数,提示错误
代码:
#bash/bin
function a() {
b=$# #判断传入的参数个数
# echo $b
if [ $b -eq 0 ] # 看参数个数是不是等于0
then
echo "no"
else
echo "yes"
fi
}
a
1,当不传入参数时,结果为:
no
2,当传入参数时,结果为:
yes
2,编写函数实现两个数字做为参数,返回最大值
代码
function a() { # 定义函数
num1=$1 # 获取第一个参数
# echo "num1:$num1"
num2=$2
# echo "num2:$num2"
if [ $num1 -gt $num2 ] # 2个参数进行比较
then
echo "$num1" # 返回第一个参数
else
echo "$num2" # 返回得第二个参数
fi
}
c=$(a 200 300) # 传入2个参数,并且将返回值赋值给c
echo "the $c is more big"
运行输出结果:
[root@localhost ~]# bash functiontest.sh
the num1:200
num2:300
300 is more big
3,编写函数,实现两个整数位参数,计算加减乘除
代码
a(){
one=$1
two=$2
echo "$one + $two = `expr $one + $two`"
echo "$one - $two = `expr $one - $two`"
echo "$one * $two = `expr $one \* $two`"
echo "$one / $two = `expr $one / $two`"
printf "$one / $two = `expr $one / $two`\n"
}
a 2 3
运行结果
[root@localhost ~]# bash functiontest.sh
2 + 3 = 5
2 - 3 = -1
2 * 3 = 6
2 / 3 = 0
2 / 3 = 0
4、将/etc/shadow文件的每一行作为元数赋值给数组
代码
function a(){
a=`wc -l /etc/shadow | cut -d" " -f1` # 将目标文件进行剪切,提取需要的数据,这里代表数据个数
for i in `seq $a`
do
b=`expr $i - 1` # 数组下标
arr[$b]=`awk 'NR=='$i'{print}' /etc/shadow` # 将对应的哪一行数据放入到数组
done
}
a
echo ${arr[0]} # 打印数组的第一个元素
echo ${arr[1]} #第二个
echo ${arr[2]}
echo ${arr[3]}
以上的结果显示为: 结果的验证可以用cat 命令对目标文件进行对比
[root@localhost ~]# bash functiontest.sh
root:$6$SqQF33Q5poRxzqNJ$mAZ7EJuymCGVS6HxSAinq4danhF48kUbkyg/Kck3VJ8mIO5tDJlrsbQ04.aXbUb63rif82rIR/Xuatvcdj6Bp1::0:99999:7:::
bin:*:19121:0:99999:7:::
daemon:*:19121:0:99999:7:::
adm:*:19121:0:99999:7:::
5,使用关联数组统计文件/etc/passwd中各个用户的shell类型
代码
function a(){
read -p "which user's shell type that you want find?:" shell_type # 提示加读取输入的变量
declare -A arry # 必须声明关联数组
l=`wc -l /etc/passwd | cut -d " " -f1` # 计算数据的条数
for i in `seq $l`
do
# ass-arry[`expr $i - 0`]
index=`cat /etc/passwd | awk 'BEGIN{FS=":"}{print $1}' | awk 'NR=='$i'{print}'` # 关联数组的下标
# echo "index $index"
declare -A arry
arry["$index"]=`cat /etc/passwd | awk 'BEGIN{FS=":"}{print $7}' | awk 'NR=='$i'{print}'` # 关联数组的值
done
echo "the user $shell_type's shell type is ${arry[$shell_type]}" # 格式化输出
}
a
运行的结果:
[root@localhost ~]# bash functiontest.sh
which user's shell type that you want find?:fu
the user fu's shell type is /bin/bash
[root@localhost ~]# bash functiontest.sh
which user's shell type that you want find?:root
the user root's shell type is /bin/bash
[root@localhost ~]# bash functiontest.sh
which user's shell type that you want find?:bin
the user bin's shell type is /sbin/nologin
6,使用关联数组按扩展名统计指定目录中文件的数量
代码
function a() {
read -p "input a file path (absolute):(such as input /etc/)>" path # 输入路径
read -p "which type of file are you count ?:(such as input txt or sh ...)>" type1 # 输入文件类型
a=`ls -l $path | awk '{print $9}' | grep '^[^$]' | awk 'BEGIN{FS="."}{print $2}'` # 看有几个文件有后缀名
declare -A arr
for i in $a
do
# echo "file type: $i"
arr["$i"]=`expr ${arr["$i"]} + 1` # 对文件类型计数表示该类型文件个数
done
echo "the file of type $type1 have ${arr[$type1]}"
}
a
运行结果如下:结果的验证可以用自己数
[root@localhost ~]# bash functiontest.sh
input a file path (absolute):(such as input /etc/)>/etc/
which type of file are you count ?:(such as input txt or sh ...)>conf
the file of type conf have 36
[root@localhost ~]# bash functiontest.sh
input a file path (absolute):(such as input /etc/)>/etc/
which type of file are you count ?:(such as input txt or sh ...)>d
the file of type d have 24
7,编写函数 ,判断是否有参数,存在为Ok,不存在为FAILED,要求绿色OK和红色FAILED
代码:
function a() {
b=$#
## echo $b
if [ $b -eq 0 ]
then
echo -e "\e[31m failde \e[0m";
else
echo -e "\e[32m ok \e[0m";
fi
}
a 1