简单的SHELL编程

目录

1 计算用户id总和

2 数组

2.1 索引数组和关联数组的区别

2.2 数组的声明

2.2.1 声明索引数组

2.2.2 声明关联数组

2.3 求10个随机数的最大值与最小值

3 简单的字符串处理

4 写一个阶乘算法


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 ~]# 
  • 8
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值