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,如需转载请自行联系原作者

相关文章
|
1月前
|
机器学习/深度学习 Unix Shell
Shell编程基础入门(Bash|变量与输入输出重定向2&1)
Shell编程基础入门(Bash|变量与输入输出重定向2&1)
84 0
|
缓存 Shell 开发工具
【Shell编程】Shell中Bash基本功能
【Shell编程】Shell中Bash基本功能
70 0
【Shell编程】Shell中Bash基本功能
|
Shell
【Shell编程】Shell中Bash变量-数值运算、运算符变量、测试和内容替换
【Shell编程】Shell中Bash变量-数值运算、运算符变量、测试和内容替换
68 0
|
Shell
【Shell编程】Shell中Bash变量-预定义变量
【Shell编程】Shell中Bash变量-预定义变量
81 0
|
Shell
【Shell编程】Shell中Bash变量-环境变量
【Shell编程】Shell中Bash变量-环境变量
61 0
|
机器学习/深度学习 Shell
【Shell编程】Shell中Bash变量-位置参数变量
【Shell编程】Shell中Bash变量-位置参数变量
65 0
|
Shell
【Shell编程】Shell中Bash变量-用户自定义变量
【Shell编程】Shell中Bash变量-用户自定义变量
55 0
|
存储 Shell 调度
学习系统编程No.8【bash实现】
学习系统编程No.8【bash实现】
|
机器学习/深度学习 存储 Shell
Linux Shell编程(2) - Bash 变量
1. Bash 变量的命名规则 变量名只能包含字母、数字、下划线 变量名不能以数字作为开头 变量名区分大小写 变量名长度不超过255个字符 变量名在有效范围内必须唯一
|
存储 Shell 测试技术
开始你的bash/shell脚本编程
原文链接 I love bash 对于我自己来说,学习新框架或技术的最佳方式是同时获得实践经验,在本文中,你将自己通过编写代码来学习shell脚本的基础知识!本文包含语法,shell脚本的基础知识到中级shell编程,通过这篇文章你可以学习shell的相关知识,并且通过shell来实现Unix/Linux之间的接口 1_qo-oir60xdhic3wjqpu64g 介绍 您可能已经多次遇到过“脚本”这个词,但脚本的的含义是什么意思呢?简单的来说,脚本是包含一系列要执行的命令。
1236 0