Bash编程(三)

    
一、bash交互式编程 
    脚本参数:
    用户交互://linux的重要思想,尽量避免和用户交互
        1.脚本传递参数, a.sh  tom jery
        2.通过键盘获取数据 
            read //
                -p 'promtpt' //提示符
                    // read a b 输入tom和jerry会分别识别为a和b  
                -t timeout 超时时间
            read a b //输入 ja tom wolf  //a==ja ,b='tom wolf'    
            read -t 5 -p "enter a name: " name 
            
            脚本:添加用户

1
2
3
4
5
6
7
8
9
10
11
12
13
14
[root@mt test]# cat adduser.sh 
#!/bin/bash
#
read -p "Enter a username : " name
[ -z $name ] && echo "username is needed ..." && exit 2
read -p "Enter a password for $name " passwd
[ -z $passwd ] && password="password"
if id $name &> /dev/null ;then
   echo "$name is exists."
else
   useradd $name
   echo "$password" | passwd --stdin $name &> /dev/null
   echo "useradd succeed.."
fi

        3.bash -n a.sh //语法错误,不能报告逻辑错误
            bash -x a.sh //调试执行
    
二、bash选择执行(if)
    过程式编程语言的执行流程:
        选择执行
        顺序执行
        循环执行
    选择执行:
        && ,||
        if语句
        case 语句
        
        if语句:三种格式
            单分支的if语句
                if CONDITION;then
                    if-true 分支;
                fi
            双分支的if语句
                if CONDITION ;then
                    if-true分支
                else
                    if-false 分支
                fi
            多分支的if语句
                if CONDITION1;then
                    条件1 为真分支
                elif CONDITION2;then
                    条件2;为真分支
                elif CONDITION3;then
                    条件3;为真分支
                ...
                else
                    所有条件都不满足时的分支
                注意:分支只会执行一个,首先测试为真;
                        多个条件同时都能满足,只执行第一个匹配到的
    脚本1-3位if语句
    
三、循环执行
        //将一段代码重复执行0,1多次
    进入条件:满足条件才进入循环
    退出条件:每个循环都有退出条件,
    
    bash脚本:
        for循环
        while循环
        until循环
    for循环
        两种格式:
            (1)遍历列表
            (2)控制变量
        遍历列表:
            for VARIABLE in LIST; do
                循环体
            done
            进入条件:只要列表有元素,即可进入循环
            退出条件:列表中的元素遍历完成
    LIST的生成方式
        (1)直接给出
        (2)整数列表
            {start..end} / echo {20..30}
            seq 10 //1-10
            seq 5 10 //从5到10
            seq 1 2 10 //步数为2,只输出奇数列表    
        (3)cat/ls /var   :返回列表的命令
            cat /etc/issue
        (4) ls -d /etc/p* 
            for i in /etc/p* 就可以
        (5) 变量引用
            $@,$# 等
        
脚本1:脚本传递一个文件名,判断文件类型是什么

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
    #!/bin/bash
    #
    if [ $# -lt 1 ] ;then
        echo "At lease one path.."
        exit 1
    fi
    if ! [ -e $1 ] ;then        //假如不存在
        echo "No suck file.."
        exit 2
    fi
     
    if -f $1 ] ;then
        echo "Common file.."
    elif [ -d $1 ] ; then
        echo "Directory.."
    elif [ -L $1 ] ; then
        echo "Symbolic file..."
    elif [ -b $1 ] ;then
        echo "block file..."
    elif [ -c $1 ] ; then
        echo "Character file..."
    elif [ -S $1 ]; then
        echo "Socket file..."
    else
        echo "Unknown ... "
    fi

    
脚本2:传递一个参数给脚本,此参数为用户名
    根据其id号判断其用于类型
        0:root
        1-999:系统用户
        1000+:登录用户

1
2
3
4
5
6
7
8
9
10
11
12
    #!/bin/bash
    #
    [ $# -lt 1 ] && echo "At least one user name." && exit 1
    ! id -u $1 &> /dev/null && echo "no suck user" && exit 2
    userid=$(id -u $1)
    if $userid -eq 0 ] ;then
        echo "root"
    elif [ $userid -ge 1000 ] ;then
        echo "logging user."
    else 
        echo "System user."
    fi

脚本3:列出如下菜单为用户
    disk)show disks info
    mem)show memory info;
    cpu)show cpu info
        cat /proc/meminfo或者lscpu
    *) quit
    提示用户给出自己的选择,而后显示对应其选择的相应系统信息

1
2
3
4
5
6
7
8
    #!/bin/bash
    #
    cat 《《  EOF
    disk) show disks info
    mem)  show memory info;
    cpu)  show cpu info
    *)    quit
    EOF
1
2
3
4
5
6
7
8
9
10
11
    read -p "Your choice: " opt
    if "$opt" == 'disk' ] ;then  
        fdisk -l /dev/sd[a-z]
    elif [ "$opt" == 'mem' ] ;then
        free -h
    elif [ "$opt" == 'cpu' ] ;then
        lscpu
    else
        echo "Unknown option.."
        exit 3
    fi

    
脚本4:添加用户
    #!/bin/bash
    #
    for i in user20 user21 user22 ;do
        if id $i &> /dev/null ; then
            echo "$i exists.."
        else
            useradd  $i && echo "Add user $i succeed"
        fi
    done
    
脚本5:从1-100的和

1
2
3
4
5
6
7
8
    #!/bin/bash
    #
    declare -i sum=0
    for in {1..100};do
        sum=$[$sum $i
        echo "\$sum is $sum" // 可以对$进行转义
    done
    echo $sum

    
脚本6:判断/var/log下所有文件的类型
    方法1:file /var/log/*
    方法2:脚本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
 #!/bin/bash
    #
    for filename in /var/log/* ; do
        echo -"$filename    "
    if -f $filename ] ;then
        echo "Common file.."
    elif -d $filename ] ; then
        echo "Directory.."
    elif -L $filename ] ; then
        echo "Symbolic file..."
    elif -b $filename ] ;then
        echo "block file..."
    elif -c $filename ] ; then
        echo "Character file..."
    elif -S $filename ]; then
        echo "Socket file..."
    else
        echo "Unknown ... "
    fi
    done

脚本7:练习
1.分别求100以内所有偶数之和,以及奇数之和
2.计算当前系统上的所有用户的id之和
3.通过脚本参数传递一个目录给脚本,而后计算此目录下所有文件文件的行数,并说明此类文件的总数











本文转自MT_IT51CTO博客,原文链接:http://blog.51cto.com/hmtk520/1950192,如需转载请自行联系原作者

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值