5.3bash编程初步

bash编程:
    bash自身是一个进程:是一个命令解释器
    type  查看命令的类型python

    shell脚本:
    第一行,顶格:
        shebang   shell和许多其它解释性语言的注释符,所以在这些语言中,解释器指令自己会
        被解释器认为是单纯的注释而跳过。
        #!/bin/bash
        #!/usr/bin/pythonlinux

        其它的以#开头的行均为注释,会被解释器忽略;shell

    练习:
        建立一个组newgroup,id号8008;
        建立一个用户,名字为mageedu, id号为3306,附加组为newgroup
        建立目录/tmp/hellobash
        复制/etc/rc.d/init.d/functions至/tmp/hellobash目录中编程

    过程式编程语言:
        顺序执行
        选择执行:测试条件,可能会多个测试条件,某条件知足时,则执行对应的分支
        循环执行:将同一段代码反复执行屡次;所以,循环必须有退出条件;不然,则陷入死循环;bash

    bash
        -n: 语法测试
             bash -n scripts.sh
        -x: 模拟单步执行编程语言

    变量类别:
        本地变量
        环境变量
            export:导出
        局部变量
        位置变量
            $1, ..., $n, ${10}   到达两位数时,须要用{}括起来
                练习:写一个脚本,能接受一个参数做为用户名,此脚本可建立此用户,而且其密码同用户名;
                shift [n]
        特殊变量:
            $?  命令状态返回值
            $#: 传递给脚本参数的个数
              
            $* 
            $@:引用传递给脚本的全部参数测试

    bash的循环语句:
        for:遍历有限的元素列表,
        while:
        until:进程

        for语句的格式:
            for VAR_NAME in LIST
            do
                循环体
            doneip

            LIST:列表,中间包括一个或多个元素it

            退出条件:遍历结束

            练习:建立10个用户,user301, user310
            [root@linux_basic scripts]#echo {01..10}
            01 02 03 04 05 06 07 08 09 10
                列表:user301, user310
                列表:301, 310

                生成数值列表:
                    {start..end}
                        例如:{1..100}
                    seq
                        命令引用
NAME
       seq - print a sequence of numbers

SYNOPSIS
       seq [OPTION]... LAST
       seq [OPTION]... FIRST LAST
       seq [OPTION]... FIRST INCREMENT LAST

DESCRIPTION
       Print numbers from FIRST to LAST, in steps of INCREMENT.                       
                [root@linux_basic scripts]#seq 01 10
                    1
                    2
                    3
                    4
                    5
                    6
                    7
                    8
                    9
                    10

                for userNo in {301..310}
                for userNo in $(seq 301 310); do
                    useradd user${userNo}
                done
[root@linux_basic scripts]#echo 3{01..10}
301 302 303 304 305 306 307 308 309 310
                                                        date +%Y%m%d-%H%M%S
            练习:建立目录/tmp/dir-当前日期时间;例如/tmp/dir-20140707-155503
                在此目录中建立10个空文件,分别为file1-file10;
mkdir /tmp/dir-$(date +%y%m%d-%H%M%S)
for filename in $(seq 1 10): do
    touch file${filename}
done
touch file{1..10}

            练习:写一个脚本
            一、建立用户tuser1-tuser9;
            二、建立目录/tmp/dir-当前日期时间;
            三、在/tmp/dir-当前日期时间 目录中建立9个空文件file101-file109
            四、将file101的属主改成tuser1,依次类推,一直将file109的属主改成tuser9;

touch tuser{1..9} var=$(date +%F-%T) mkdir /tmp/dir-${var} touch /tmp/dir-${var}/file1{01..09} for num in $(seq 1 9);do     chmod user${num} /tmp/dir-${var}/file10${num} done

相关文章
相关标签/搜索