1、编写函数,实现打印绿色OK和红色FAILED
判断是否有参数,存在为Ok,不存在为FAILED
2、编写函数,实现判断是否无位置参数,如无参数,提示错误
3、编写函数实现两个数字做为参数,返回最大值
4、编写函数,实现两个整数位参数,计算加减乘除。
5、将/etc/shadow文件的每一行作为元数赋值给数组
6、使用关联数组统计文件/etc/passwd中用户使用的不同类型shell的数量
1、编写函数,实现打印绿色OK和红色FAILED,判断是否有参数,存在为Ok,不存在为FAILED
知识点:
# echo -e "\033[字背景颜色;字体颜色;字体属性m 需要输出的内容 \033[0m"
红色=31
绿色=32
代码:
[root@server project]# vim if_col.sh
if [ "$#" -eq 0 ]; then
echo -e "\e[31m FAILED \e[0m"
else
echo -e "\e[32m OK \e[0m"
fi
2、编写函数,实现判断是否无位置参数,如无参数,提示错误
$#可以判断位置参数是否存在,然后利用$1打印位置参数
[root@server project]# vim if_ture.sh #创建一个脚本
if [ "#" -eq 0 ]; then 判断位置参数是否存在
echo 错误:没有位置参数
else
echo "参数的数量是: $1"
fi
3、编写函数实现两个数字做为参数,返回最大值
我的想法是利用交互式,如果之间使用带位置参数的可以用$1 $2 获取值再比较
[root@server project]# vim data_gt.sh
read -p "请输入第一个数字" a
read -p "请输入第二个数字" b
max(){
if [ $a -gt $b ];then
echo $a
else
echo $b
fi
}
max
4、编写函数,实现两个整数位参数,计算加减乘除。
[root@server project]# vim sum_data.sh
# 定义函数
calculate() {
# 获取参数
num1=$1
num2=$2
# 执行加法运算
add=$((num1 + num2))
echo "加法结果: $add"
# 执行减法运算
sub=$((num1 - num2))
echo "减法结果: $sub"
# 执行乘法运算
mul=$((num1 * num2))
echo "乘法结果: $mul"
# 执行除法运算
if [ $num2 -ne 0 ]; then
div=$((num1 / num2))
echo "除法结果: $div"
else
echo "除数不能为0"
fi
}
# 调用函数并传递参数
calculate 10 5
5、将/etc/shadow文件的每一行作为元数赋值给数组
[root@server project]# vim read_line.sh
#!/bin/bash
# 读取文件内容到数组
readarray -t lines < /etc/shadow
# 遍历数组并打印每一行的内容
for line in "${lines[@]}"
do
echo "$line"
done
6、使用关联数组统计文件/etc/passwd中用户使用的不同类型shell的数量
[root@server project]# vim shell_con.sh
#!/bin/bash
# 声明关联数组
declare -A shell_counts
# 读取/etc/passwd文件
while IFS=: read -r username passwd uid gid fullname home_dir shell; do
# 获取shell名称(忽略大小写)
shell_name=$(basename "$shell" | tr '[:upper:]' '[:lower:]')
# 增加shell计数
((shell_counts[$shell_name]++))
done < /etc/passwd
# 打印结果
for shell_name in "${!shell_counts[@]}"; do
count=${shell_counts[$shell_name]}
echo "$shell_name: $count"
done | sort -k2 -n