目录
1 计算用户id总和
要求:使用while read line和/etc/passwd,计算用户id总和
#!/bin/bash
sum=0
while IFS=: read username x uid trash
do
let sum+=uid
done < /etc/passwd
echo "用户ID总和为: $sum"
效果:
[root@linux1 ~]# bash test.sh
用户ID总和为: 79239
[root@linux1 ~]#
2 数组
2.1 索引数组和关联数组的区别
索引数组一般是索引值为数字(从0开始编号)的一种数组,可以使用declare -a的命令直接定义
关联数组一般指索引值为字符串(名称需自定义)的一种数组,必须使用declare -A命令来定义数组
2.2 数组的声明
2.2.1 声明索引数组
[root@linux1 ~]# set a
[root@linux1 ~]# a=(1 2 3 4) #直接给整个数组赋值
[root@linux1 ~]# echo ${a[*]}
1 2 3 4
[root@linux1 ~]# a[1]=x #给数组的某一项赋值
[root@linux1 ~]# a[3]=y
[root@linux1 ~]# echo ${a[*]}
1 x 3 y
[root@linux1 ~]#
2.2.2 声明关联数组
[root@linux1 ~]# declare -A abc
[root@linux1 ~]# abc[aaa]=aaa
[root@linux1 ~]# abc[bbb]=bbb
[root@linux1 ~]# abc[ccc]=ccc
[root@linux1 ~]# echo ${abc[*]}
ccc bbb aaa
[root@linux1 ~]#
2.3 求10个随机数的最大值与最小值
max_and_min() {
declare -i -a number
maxnum=0
minnum=32768
for i in {0..9}
do
number[$i]=$RANDOM
if [ "${number[$i]}" -gt "$maxnum" ]; then
maxnum=${number[$i]}
fi
if [ "${number[$i]}" -lt "$minnum" ];then
minnum=${number[$i]}
fi
done
echo "生成的数为为:${number[*]}"
echo "最小值为:${minnum}"
echo "最大值为:${maxnum}"
}
max_and_min
效果:
[root@linux1 ~]# bash test.sh
生成的数为为:20671 18707 5210 23244 15418 2952 15559 15308 22372 4050
最小值为:2952
最大值为:23244
[root@linux1 ~]#
3 简单的字符串处理
但凡学过一种高级语言都能一边过吧
[root@linux1 ~]# variable="hello,world!"
[root@linux1 ~]# echo ${variable:3} #从第4个字符开始输出
lo,world!
[root@linux1 ~]# echo ${variable:3:2} #从第4个字符开始输出2个字符
lo
[root@linux1 ~]# echo ${variable: -3} #取后3个字符,注意“-”前面有空格!
ld!
[root@linux1 ~]# echo ${variable:2:-3} #排除字符串的前2个字符和后3个字符
llo,wor
[root@linux1 ~]#
4 写一个阶乘算法
很简单的……吧?
abs() {
if [ $1 -gt 0 ]; then
echo $1
else
echo $((-1 * $1))
fi
}
input_factorial() {
read -p "请输入一个正整数:" number
number=$(abs ${number})
echo number
}
#阶乘部分最好别瞎改,血的教训
factorial() {
if [[ $1 == 0 || $1 == 1 ]]; then
echo 1
else
echo $(( $1 * $(factorial $(($1-1))) ))
fi
}
main() {
input_factorial
factorial ${number}
}
main
效果
[root@linux1 ~]# bash test.sh
请输入一个正整数:-12
479001600
[root@linux1 ~]#