您的位置:新葡亰496net > 电脑系统 > shell脚本入门,Linuxshell脚本攻略第一章小试牛刀

shell脚本入门,Linuxshell脚本攻略第一章小试牛刀

发布时间:2019-10-06 09:11编辑:电脑系统浏览(145)

    一、极端打字与印刷

    [root@cai ~]# echo welcome to bash!

    welcome to bash!

     

    [cairui@cai ~]$ echo 'welcome to bash!'

    welcome to bash!

     

    [cairui@cai ~]$ echo "welcome to bash!"

    welcome to bash!

    (注意,双引号内不可能平昔用特殊符号,须要用转义符)

     

    [cairui@cai ~]$ printf "hello world"

    hello world

     

    #!/bin/bash

    #filename:printf.sh

     

    printf  "%-5s %-10s %-4sn" no name mark

    printf  "%-5s %-10s %-4.2fn" 1 sarath 80.3456

    printf  "%-5s %-10s %-4.2fn" 2 james 90.9989

    printf  "%-5s %-10s %-4.2fn" 3 jeff 77.564

    获取如下结果

    [cairui@cai shell]$ sh printf.sh

    no    name       mark

    1     sarath     80.35

    2     james      91.00

    3     jeff       77.56

     

    1.职业原理

      %s ,%c,%d和%f都以格式替换符,其所对应的参数能够放手带引号的格式字符串之后。

      %-5s指明格式为左对齐且宽度为5的字符串替换,缺乏的用空格补上。

      对于%-4.2f,其中.2钦赐保留2个小数位。

    2.互补内容

    (1)在echo中间转播义换行符

    [cairui@cai shell]$ echo -e "1t2t3"

    1 2 3

    (2)打字与印刷彩色输出

    重置=0,黑色=30,红色=31,绿色=32,黄色=33,蓝色=34,洋红=35,青色=36,白色=37

    打印彩色文本

     

    [cairui@cai shell]$ echo -e "e[1;31m this is red text e[0m"

     this is red text

     

    安装彩色背景,复位=0,深紫=40,栗色=41,中湖蓝=42,芙蓉红=43,灰黄=44,朱红=45,土褐=46,淡褐=47

     

     

    Bash Shell 小规模试制牛刀,bashshell小规模试制牛刀

    shell脚本入门

    1.1 简介

    二、玩转换量和遭受变量

      在bash中,每四个变量的值都是字符串。无论你给变量赋值时有未有引号,值都是以字符串方式存在。有局地特别的变量会被shell情状和操作系统意况用来囤积一些特意的值,那类变量就叫做情状变量。

    shell脚本入门,Linuxshell脚本攻略第一章小试牛刀。Cat /proc/$PID/environ(查看运转时的碰到变量)

    例子:

    [cairui@cai shell]$ pgrep mysql

    11029

    11313

    [cairui@cai shell]$ sudo cat /proc/11313/environ

    TERM=xtermOLDPWD=/application/mysqlPATH=/sbin:/usr/sbin:/bin:/usr/bin:/application/mysql/binPWD=/application/mysqlSHLVL=3MYSQL_HOME=/application/mysql_=/usr/bin/nohup

    [cairui@cai shell]$ sudo cat /proc/11313/environ |tr '' 'n'

    TERM=xterm

    OLDPWD=/application/mysql

    PATH=/sbin:/usr/sbin:/bin:/usr/bin:/application/mysql/bin

    PWD=/application/mysql

    SHLVL=3

    MYSQL_HOME=/application/mysql

    _=/usr/bin/nohup

     

    1.实战彩排

     

    [cairui@cai shell]$ var=value

    [cairui@cai shell]$ echo $var

    value

     

    Variable.sh代码如下:

    #!/bin/bash

    fruit=apple

    count=5

    echo "we have $count $fruit(s)"

    [cairui@cai shell]$ sh variable.sh

    we have 5 apple(s)

     

    Export命令正是用来设置景况变量:

    [cairui@cai shell]$ echo $PATH

    /application/mysql/bin:/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/application/xtrabackup/bin:/home/cairui/bin

    [cairui@cai shell]$ export PATH="$PATH:/home/cairui"

    [cairui@cai shell]$ echo $PATH

    /application/mysql/bin:/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/application/xtrabackup/bin:/home/cairui/bin:/home/cairui

     

    2.互补内容

    length=${#var}

    例如:

    [cairui@cai shell]$ vai=1234567890

    [cairui@cai shell]$ echo ${#vai}

    10

     

    一、极端打字与印刷

    [[email protected] ~]# echo welcome to bash!

    welcome to bash!

     

    [[email protected] ~]$ echo 'welcome to bash!'

    welcome to bash!

     

    [[email protected] ~]$ echo "welcome to bash!"

    welcome to bash!

    (注意,双引号内不可能平昔用特殊符号,必要用转义符)

     

    [[email protected] ~]$ printf "hello world"

    hello world

     

    #!/bin/bash

    #filename:printf.sh

     

    printf  "%-5s %-10s %-4sn" no name mark

    printf  "%-5s %-10s %-4.2fn" 1 sarath 80.3456

    printf  "%-5s %-10s %-4.2fn" 2 james 90.9989

    printf  "%-5s %-10s %-4.2fn" 3 jeff 77.564

    获得如下结果

    [[email protected] shell]$ sh printf.sh

    no    name       mark

    1     sarath     80.35

    2     james      91.00

    3     jeff       77.56

     

    1.行事原理

      %s ,%c,%d和%f皆以格式替换符,其所对应的参数可以停放带引号的格式字符串之后。

      %-5s指明格式为左对齐且宽度为5的字符串替换,非常不够的用空格补上。

      对于%-4.2f,在那之中.2钦点保留2个小数位。

    2.填补内容

    (1)在echo中转义换行符

    [[email protected] shell]$ echo -e "1t2t3"

    1 2 3

    (2)打字与印刷彩色输出

    重置=0,黑色=30,红色=31,绿色=32,黄色=33,蓝色=34,洋红=35,青色=36,白色=37

    打字与印刷彩色文本

     

    [[email protected] shell]$ echo -e "e[1;31m this is red text e[0m"

     this is red text

     

    安装彩色背景,重新初始化=0,浅橙=40,藏浅淡黄=41,金红=42,铁锈棕=43,酱色=44,洋蓟绿=45,紫藤色=46,紫藤色=47

     

     

     

    1 打开终端后,就能够产出四个提示符,格局平日如下

    三、利用函数增加意况变量

      PATH=/usr/bin;/bin

    那表示一旦shell必要实行二进制可施行文件时,它会率先查找/usr/bin,然后是/bin

     

    二、玩调换量和意况变量

      在bash中,每一个变量的值都以字符串。无论你给变量赋值时有未有引号,值都是以字符串格局存在。有局地例外的变量会被shell意况和操作系统环境用来存款和储蓄一些特地的值,那类变量就叫做情状变量。

    Cat /proc/$PID/environ(查看运行时的境遇变量)

    例子:

    [[email protected] shell]$ pgrep mysql

    11029

    11313

    [[email protected] shell]$ sudo cat /proc/11313/environ

    TERM=xtermOLDPWD=/application/mysqlPATH=/sbin:/usr/sbin:/bin:/usr/bin:/application/mysql/binPWD=/application/mysqlSHLVL=3MYSQL_HOME=/application/mysql_=/usr/bin/nohup

    [[email protected] shell]$ sudo cat /proc/11313/environ |tr '' 'n'

    TERM=xterm

    OLDPWD=/application/mysql

    PATH=/sbin:/usr/sbin:/bin:/usr/bin:/application/mysql/bin

    PWD=/application/mysql

    SHLVL=3

    MYSQL_HOME=/application/mysql

    _=/usr/bin/nohup

     

    1.实战排练

     

    [[email protected] shell]$ var=value

    [[email protected] shell]$ echo $var

    value

     

    Variable.sh代码如下:

    #!/bin/bash

    fruit=apple

    count=5

    echo "we have $count $fruit(s)"

    [[email protected] shell]$ sh variable.sh

    we have 5 apple(s)

     

    Export命令正是用来设置景况变量:

    [[email protected] shell]$ echo $PATH

    /application/mysql/bin:/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/application/xtrabackup/bin:/home/cairui/bin

    [[email protected] shell]$ export PATH="$PATH:/home/cairui"

    [[email protected] shell]$ echo $PATH

    /application/mysql/bin:/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/application/xtrabackup/bin:/home/cairui/bin:/home/cairui

     

    2.互补内容

    length=${#var}

    例如:

    [[email protected] shell]$ vai=1234567890

    [[email protected] shell]$ echo ${#vai}

    10

     

    001

    [email protected]$ 或者[email protected]#

    四、行使shell举办数学运算

      在bash shell碰着中,能够使用let,[],(())实施基本的算术操作。而在张开尖端操作时,expr和bc那四个工具也会丰硕实用。

    1.实例

    #!/bin/bash

    #filename:jia.sh

    no1=4;

    no2=5;

    let result=no1 no2

    echo $result

    [cairui@cai shell]$ sh jia.sh

    shell脚本入门,Linuxshell脚本攻略第一章小试牛刀。9

    自加操作

    let no1

    自减操作

    let no1--

    简写情势

    let no =6

    let no-=6

    它们分别等于let no=no 6和let no=no-6

    (2)bc是贰个数学高档工具,这一个Mini计算器包涵了汪洋的选项。

     

    [root@cai ~]# echo "4*8"|bc

    32

     

    no=54

    result=’echo “$no*1.5”|bc’

    echo $result

    81.0

    l 设定小数精度。上边,参数scale=2将小数位个数设置为2.

    [cairui@cai shell]$ echo "scale=2;3/8"|bc

    .37

    进制转变。用bc能够将一种进制系统转变为另一种。(10进制转变2进制)

    #!/bin/bash

    #用途:数字调换

     

    no=100

    echo "obase=2;$no" |bc

     

    no=1100100

    echo "obase=10;ibase=2;$no" |bc

    [cairui@cai shell]$ sh shuzizhuanhuan.sh

    1100100

    100

    l 总结平方及平方根

    [cairui@cai shell]$ echo "sqrt(100)"|bc

    10

     

    [cairui@cai shell]$ echo "10^10"|bc

    10000000000

     

    三、动用函数增加景况变量

      PATH=/usr/bin;/bin

    那象征一旦shell必要施行二进制可实行文件时,它会首先查找/usr/bin,然后是/bin

     

    #!/bin/bash

    2 $表示的是普通顾客,#代表的是顶级顾客。一流客商是Linux中权限最高的客户

    五、玩转文件陈诉符及重定向

      文件汇报符是与公事输入、输出相关联的子弹头。它们用来追踪已开发的公文。最广泛的文件叙述符是stdin(标准输入)、stdout(规范输出)和stderr(标准错误)。

    0-----stdin

    1-----stdout

    2-----stderr

    1.实例

    [cairui@cai shell]$ echo "this is a sample text " >temp.txt

    [cairui@cai shell]$ cat temp.txt

    this is a sample text

    [cairui@cai shell]$ echo "this is a sample text " >>temp.txt

    [cairui@cai shell]$ cat temp.txt

    this is a sample text

    this is a sample text

    当命令出现谬误时,错误消息就能够被打字与印刷出来

     

    [cairui@cai shell]$ ls

    ls: cannot access : No such file or directory(错误音讯)

     

    2.做事原理

    >等同于1>;对于>>也是一律1>>

    (1)将文件重定向到命令

    cmd < file

    (2)将脚本内部的文本块实行重定向

    #!/bin/bash

    cat<<EOF>log.txt

    LOG FILE HEADER

    this is a test log

    function:system statistics

    EOF

     

    [cairui@cai shell]$ sh log-txt.sh

    [cairui@cai shell]$ cat log.txt

    LOG FILE HEADER

    this is a test log

    function:system statistics

     

    四、选用shell进行数学生运动算

      在bash shell处境中,能够动用let,[],(())施行基本的算术操作。而在张开尖端操作时,expr和bc那七个工具也会极度管用。

    1.实例

    #!/bin/bash

    #filename:jia.sh

    no1=4;

    no2=5;

    let result=no1 no2

    echo $result

    [[email protected] shell]$ sh jia.sh

    9

    自加操作

    let no1

    自减操作

    let no1--

    简写方式

    let no =6

    let no-=6

    它们分别等于let no=no 6和let no=no-6

    (2)bc是一个数学高端工具,这么些Mini总结器包罗了大气的选项。

     

    [[email protected] ~]# echo "4*8"|bc

    32

     

    no=54

    result=’echo “$no*1.5”|bc’

    echo $result

    81.0

    l 设定小数精度。下边,参数scale=2将小数位个数设置为2.

    [[email protected] shell]$ echo "scale=2;3/8"|bc

    .37

    进制转变。用bc能够将一种进制系统调换为另一种。(10进制转变2进制)

    #!/bin/bash

    #用途:数字转变

     

    no=100

    echo "obase=2;$no" |bc

     

    no=1100100

    echo "obase=10;ibase=2;$no" |bc

    [[email protected] shell]$ sh shuzizhuanhuan.sh

    1100100

    100

    l 计算平方及平方根

    [[email protected] shell]$ echo "sqrt(100)"|bc

    10

     

    [[email protected] shell]$ echo "10^10"|bc

    10000000000

     

    002

    3 有三种运营脚本的方法

    六、数组和关周全组

    array_var=(1  2  3  4  5  6)#那几个值将会积存在以0为初步索引的连天地点上

    除此以外还足以将数组定义为一组“索引-值”

    array_var[0]=”test1”

    array_var[1]=”test2”

    ......

    ......

    ......

    ......

    array_var[5]=”test6”

     

    echo $array_var[0]

    test1

     

    echo $array_var[*]

    test1 test2 test3 test4 test5 test6

     

    打字与印刷数老总度

    echo ${#array_var[*]}

    6

     

    五、玩转文件汇报符及重定向

      文件陈述符是与公事输入、输出相关联的整数。它们用来追踪已开发的公文。最常见的公文陈述符是stdin(标准输入)、stdout(标准输出)和stderr(规范错误)。

    0-----stdin

    1-----stdout

    2-----stderr

    1.实例

    [[email protected] shell]$ echo "this is a sample text " >temp.txt

    [[email protected] shell]$ cat temp.txt

    this is a sample text

    [[email protected] shell]$ echo "this is a sample text " >>temp.txt

    [[email protected] shell]$ cat temp.txt

    this is a sample text

    this is a sample text

    当命令出现错误时,错误音讯就能被打字与印刷出来

     

    [[email protected] shell]$ ls

    ls: cannot access : No such file or directory(错误信息)

     

    2.办事原理

    >等同于1>;对于>>也是一律1>>

    (1)将文件重定向到命令

    cmd < file

    (2)将脚本内部的文本块进行重定向

    #!/bin/bash

    cat<<EOF>log.txt

    LOG FILE HEADER

    this is a test log

    function:system statistics

    EOF

     

    [[email protected] shell]$ sh log-txt.sh

    [[email protected] shell]$ cat log.txt

    LOG FILE HEADER

    this is a test log

    function:system statistics

     

    fruit=apple

    sh script.sh 恐怕是 path script (path是本子所在的目录)

    七、动用别名

    (1)可以用以下方法开创三个小名

    alias new_command=’command sequence’

    (2)上述别称只是一时半刻的。为了使小名永世生效,能够将它献身~/.bashrc文件中

    echo ‘alias cmd=”commadn seq”’ >> ~/.bashrc

    (3)删除小名,只要求从~/.bashrc中去除就足以了

     

    六、数组和事关数组

    array_var=(1  2  3  4  5  6)#这个值将会蕴藏在以0为开首索引的连年地点上

    除此以外仍是能够将数组定义为一组“索引-值”

    array_var[0]=”test1”

    array_var[1]=”test2”

    ......

    ......

    ......

    ......

    array_var[5]=”test6”

     

    echo $array_var[0]

    test1

     

    echo $array_var[*]

    test1 test2 test3 test4 test5 test6

     

    打字与印刷数老板度

    echo ${#array_var[*]}

    6

     

    003

    4 在bash中各个命令是经过分行";"来分其他

    八、获取极限新闻

      tput和stty是四款终端处理工科具。

    1.实例

    l 获取极限的行数和列数:

    tput cols

    tput lines

    l 打字与印刷当前终端名:

    tput longname

    l 将光标移动到坐标(100,100)处:

    tput cup 100 100

    l 设置终点背景观:

    tputsetb n

    中间,n能够在0到7里面取值

    l 设置文本样式为粗体

    tput bold

    l 设置下划线的起止:

    tput smu1

    tput rmu1

    l 删除从近日光标地方到行尾的具有内容:

    tputed

    l 在输入密码时,不应当显示输入内容:

    #!/bin/bash

    #filename:password.sh

    echo -e “enter password:”

    stty -echo

    read password

    stty echo

    echo

    echo password read

     

    七、应用外号

    (1)能够用以下方法开创一个小名

    alias new_command=’command sequence’

    (2)上述小名只是权且的。为了使别名永远生效,能够将它位于~/.bashrc文件中

    echo ‘alias cmd=”commadn seq”’ >> ~/.bashrc

    (3)删除别称,只必要从~/.bashrc中除去就能够了

     

    count=5

    1.2 终端打印

    九、获取、设置日期和延迟

       相当多顺序要以区别的格式打字与印刷日期、设置日期和时间、根据日期和岁月执行操作。延时不以为奇用于在程序执行进度中提供一段等待时间(比方1秒)。举例需求在本子中对某项职务每隔5秒监视贰回,就须求精晓怎么着在前后相继中投入延时。

    1.实例

    (1)[cairui@cai support-files]$ date

    Tue Jun  6 15:27:22 CST 2017

    (2)打字与印刷纪元时:

    [cairui@cai support-files]$ date %s

    1496734094

     

    [cairui@cai support-files]$ date --date "jan 20 2011" %A

    Thursday

    (3)用格式串结合 作为date命令的参数:

    [cairui@cai support-files]$ date " %d %b %y"

    06 Jun 17

    (4)设置时间和日期:

    date -s “格式化的日期字符串”

    例子:

    date -s “21 june 2009 11:01:22”

    (5)有时,大家必要检查一组命令所耗费的时刻,以下代码:

    #!/bin/bash

    #filename:time_take.sh

    start=$(date %s)

    commands;

    statements;

     

    end=$(date %s)

    difference=$((end - start))

    echo time taken to execute commands is $difference seconds

    2.工作规律

    日期内容

    格式

    星期

    %a(A)

    %b(B)

    %d

    固定格式日期(mm、dd、yy)

    %D

    %y(Y)

    小时

    %I或%H

    分钟

    %M

    %S

    纳秒

    %N

    Unix纪元时(以秒为单位)

    %s

     

     

    3.补给内容

     在剧本中推迟试行一段时间,能够用sleep;$sleep no_of_seconds.举例,上面包车型大巴剧本就利用tput和sleep从0早先计数到40:

    #!/bin/bash

    #filename:sleep.sh

    echo -n Count:   (echo -n不换行输出)

    tput sc

     

    count=0;

    while true;

    do

      if [ $count -lt 40 ];

      then

          let count ;

          sleep 1;

          tput rc

          tput ed

          echo -n $count;

      else exit 0;

      fi

    done

      在地点的例证中,变量count早先化为0,随后每循环叁回便加1.echo语句打字与印刷出count的值。用tput sc存款和储蓄光标的职分。在每一遍循环中,通过复苏此前存款和储蓄的光标的地方,在顶峰中打印出新的count的值。恢复生机光标的命令是tput rc。tput ed清除从此时此刻光标地方到行尾之间的兼具剧情,使得旧的count值能够被铲除并写入新值。循环内的1分钟延迟是经过sleep命令来完结。

     

    八、收获极限音讯

      tput和stty是七款终端管理工科具。

    1.实例

    l 获取极限的行数和列数:

    tput cols

    tput lines

    l 打字与印刷当前极端名:

    tput longname

    l 将光标移动到坐标(100,100)处:

    tput cup 100 100

    l 设置极端背景象:

    tputsetb n

    当中,n能够在0到7之内取值

    l 设置文本样式为粗体

    tput bold

    l 设置下划线的起止:

    tput smu1

    tput rmu1

    l 删除从近来光标地点到行尾的保有剧情:

    tputed

    l 在输入密码时,不该显得输入内容:

    #!/bin/bash

    #filename:password.sh

    echo -e “enter password:”

    stty -echo

    read password

    stty echo

    echo

    echo password read

     

    004

    1 echo是用于终端打字与印刷的主干命令,在默许情状下echo在每一次调用后都会增加三个换行符

    十、调解脚本

    (1)bash -x script.sh or sh -x script.sh

    (2)使用set -x和set x对台本进行一些调节和测验。比方:

    #!/bin/bash

    #filename:debug.sh

    for i in {1..6};

    do

        set -x

        echo $i

        set x

    done

    echo "script executed"

    [cairui@cai shell]$ sh debug.sh

    echo 1

    1

    set x

    echo 2

    2

    set x

    echo 3

    3

    set x

    echo 4

    4

    set x

    echo 5

    5

    set x

    echo 6

    6

    set x

    script executed

    在地点的台本中,只会打字与印刷出 echo $i的调节和测量试验消息。因为使用了-x和 x对调治将养区域张开了限定。

    (3)前边二种调节和测试都以内建的。他们平凡以稳住的格式生成调节和测量检验消息。但是在相当多情状下,我们供给以自定义格式呈现调节和测量试验音讯。能够经过传递_DEBUG境遇变量来树立那类调节和测量试验风格。

    #!/bin/bash

    function DEBUG()

    {

      [ "$_DEBUG" == "on" ]  && $@ || :

     

    }

    for i in {1..10}

    do

      DEBUG echo $i

    done

    ~          

    [root@cai shell]# _DEBUG=on ./DEBUG.sh

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    咱俩在每四个索要打字与印刷调节和测量试验新闻的说话前增进DEBUG。若无把_DEBUG=on传递给脚本,那么调节和测量试验新闻就不会被打字与印刷出来。在bash中,命令“:”告诉shell不要开展另外操作。

     

    九、获取、设置日期和推迟

       很多顺序要以不相同的格式打字与印刷日期、设置日期和时间、依照日期和时间实践操作。延时习感觉常用于在程序实行进度中提供一段等待时间(举个例子1秒)。举个例子供给在本子中对某项义务每隔5秒监视叁遍,就需求明白怎么样在程序中投入延时。

    1.实例

    (1)[[email protected] support-files]$ date

    Tue Jun  6 15:27:22 CST 2017

    (2)打字与印刷纪元时:

    [[email protected] support-files]$ date %s

    1496734094

     

    [[email protected] support-files]$ date --date "jan 20 2011" %A

    Thursday

    (3)用格式串结合 作为date命令的参数:

    [[email protected] support-files]$ date " %d %b %y"

    06 Jun 17

    (4)设置时间和日期:

    date -s “格式化的日子字符串”

    例子:

    date -s “21 june 2009 11:01:22”

    (5)有的时候,我们须求检讨一组命令所开销的年华,以下代码:

    #!/bin/bash

    #filename:time_take.sh

    start=$(date %s)

    commands;

    statements;

     

    end=$(date %s)

    difference=$((end - start))

    echo time taken to execute commands is $difference seconds

    2.职业规律

    日期内容

    格式

    星期

    %a(A)

    %b(B)

    %d

    固定格式日期(mm、dd、yy)

    %D

    %y(Y)

    小时

    %I或%H

    分钟

    %M

    %S

    纳秒

    %N

    Unix纪元时(以秒为单位)

    %s

     

     

    3.补给内容

     在本子中推迟推行一段时间,能够用sleep;$sleep no_of_seconds.比方,上边包车型客车本子就选用tput和sleep从0开头计数到40:

    #!/bin/bash

    #filename:sleep.sh

    echo -n Count:   (echo -n不换行输出)

    tput sc

     

    count=0;

    while true;

    do

      if [ $count -lt 40 ];

      then

          let count ;

          sleep 1;

          tput rc

          tput ed

          echo -n $count;

      else exit 0;

      fi

    done

      在上面的事例中,变量count开头化为0,随后每循环二次便加1.echo语句打字与印刷出count的值。用tput sc存款和储蓄光标的岗位。在每一回循环中,通过复苏以前存款和储蓄的光标的职分,在极端中打字与印刷出新的count的值。恢复生机光标的通令是tput rc。tput ed清除从此时此刻光标地方到行尾之间的具有内容,使得旧的count值能够被排除并写入新值。循环内的1分钟延迟是因此sleep命令来达成。

     

    echo "We have $count ${fruit}(s)"

    2 另三个能够用来终端打字与印刷的吩咐是printf,printf的参数和C语言中的printf函数同样

    十一、函数和参数

    1.实例

    大家得以创立推行一定职责的函数,也得以创立能够承受参数的函数。

    (1)定义函数:

    function fname()

    {

      statements;

    }

    或者

    fname()

    {

      statements;

    }

    (2)只需求使用函数名就能够调用有个别函数:

    $fname  #实行函数

    (3)参数能够传递给函数,并由脚本实行寻访:

    fname arg1 arg2;#传递函数

    以下是函数fname 的概念。在函数fname中,满含了种种访谈函数参数的主意。

    fname()

    {

    echo $1,$2;访谈参数1和参数2

    echo “$@”;以列表的法子一回性打字与印刷全体参数

    echo “$*”;类似于¥@,可是参数被用作单个实体

    return 0;返回值

    }

    l $1是首先个参数

    l $2是第1个参数

    l $n是第n个参数

    l “$@”被增加成”$1” “$2” “$3”等

    l “$*”被扩展成”$1c$2c$3”,个中c是IFS的首先个字符

    l “$@”要比$*用的多。

    2.填补内容

    (1)递归函数

    f() {echo $1;f hello;sleep 1;}

    (2)导出函数

    export -f fname

     

    十、调治脚本

    (1)bash -x script.sh or sh -x script.sh

    (2)使用set -x和set x对台本实行部分调节和测量试验。举个例子:

    #!/bin/bash

    #filename:debug.sh

    for i in {1..6};

    do

        set -x

        echo $i

        set x

    done

    echo "script executed"

    [[email protected] shell]$ sh debug.sh

    echo 1

    1

    set x

    echo 2

    2

    set x

    echo 3

    3

    set x

    echo 4

    4

    set x

    echo 5

    5

    set x

    echo 6

    6

    set x

    script executed

    在上面的剧本中,只会打字与印刷出 echo $i的调试音信。因为运用了-x和 x对调养区域展开了限制。

    (3)前边二种调节和测量试验都是内建的。他们平常以一定的格式生成调试音讯。不过在点不清地方下,大家必要以自定义格式显示调节和测验音信。能够经过传递_DEBUG情形变量来构建那类调节和测验风格。

    #!/bin/bash

    function DEBUG()

    {

      [ "$_DEBUG" == "on" ]  && [email protected] || :

     

    }

    for i in {1..10}

    do

      DEBUG echo $i

    done

    ~          

    [[email protected] shell]# _DEBUG=on ./DEBUG.sh

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    咱俩在每叁个急需打字与印刷调节和测量试验音信的讲话前拉长DEBUG。若无把_DEBUG=on传递给脚本,那么调节和测量检验音讯就不会被打字与印刷出来。在bash中,命令“:”告诉shell不要进行别的操作。

     

    005

    3 在暗中同意情形下,echo会将三个换行符追加到输出文本的尾巴,能够利用-n来忽略结尾的换行符

    十二、不适用回车键来读取n个字符

      read是贰个重要的bash命令,它用来从键盘或专门的学业输入中读取文本。大家能够运用read以互相的情势读取来自客商的输入,可是read能做的可远远不仅于此。任何编制程序语言的输入库大多都是从键盘读取输入;但唯有当回车键按下的时候,才标记着输入达成。而略带游戏里只要求按q就能够自由本事。

    (1)下边包车型地铁语句从输入中读取n个字符并存入变量variable_name;

    read -n number_of_chars variable_name

    例如:

    read -n 2 var

    echo $var

    (2)用无回显的主意读取密码:

    read -s var

    (3)显示提醒新闻:

    read -p “enter input:” var

    (4)在特定时间限制内读取输入:

    read -t timeout var

     

    read -t 2 var  #在2秒内将键入的字符串读入变量var

    (5)用特定的定界符作为输入行的收尾:

    read -d delim_char var

     

    read -d “:” var

    hello:#var 被设置为hello

     

    十一、函数和参数

    1.实例

    笔者们能够创设推行一定任务的函数,也得以制造能够经受参数的函数。

    (1)定义函数:

    function fname()

    {

      statements;

    }

    或者

    fname()

    {

      statements;

    }

    (2)只供给利用函数名就足以调用有个别函数:

    $fname  #施行函数

    (3)参数能够传递给函数,并由脚本进行访谈:

    fname arg1 arg2;#传递函数

    以下是函数fname 的定义。在函数fname中,包括了种种访谈函数参数的主意。

    fname()

    {

    echo $1,$2;访谈参数1和参数2

    echo “[email protected]”;以列表的不二秘籍壹次性打字与印刷全数参数

    echo “$*”;类似于¥@,不过参数被看作单个实体

    return 0;返回值

    }

    l $1是率先个参数

    l $2是第叁个参数

    l $n是第n个参数

    l “[email protected]”被扩展成”$1” “$2” “$3”等

    l “$*”被扩充成”$1c$2c$3”,当中c是IFS的率先个字符

    l “[email protected]”要比$*用的多。

    2.互补内容

    (1)递归函数

    f() {echo $1;f hello;sleep 1;}

    (2)导出函数

    export -f fname

     

     

    4 假如急需运用转义体系,则使用echo -e ”包涵转义种类的字符串"这种样式

    十三、运维命令直至试行成功

      在平时专门的职业中动用shell时,不时候命令独有满意有个别原则或许某种外界事件(举个例子文件能够被下载)操作本领成功施行。这种情况下,你可能希望再次实施命令,直到成功停止。

    1.实例:

    依照以下措施定义函数:

    repeat()

    {

     while true

     do

    $@ && return

    done

    }

    抑或把它放入shell的rc文件,更便利使用:

    repeat() {while true;do $@ && return;done}

    2.专业规律

      大家创建了函数repeat,它包蕴了七个最为while循环,该循环实施以参数情势(通过$@访谈)传入函数的吩咐。如若命令实行成功,则赶回,进而Infiniti循环。

    3.填补内容

    (1)一种越来越快的做法

    repeat() {while :; do $@ && return; done } 比第一种方式快

    (2)扩充延时

    repeat wget -c ........

    repeat() {while :; do $@ && return; sleep 30; done}那使得命令每30秒运营贰遍。

    十二、不适用回车键来读取n个字符

      read是多个首要的bash命令,它用来从键盘或正规输入中读取文本。大家能够利用read以相互的花样读取来自客商的输入,可是read能做的可远远不只有于此。任何编制程序语言的输入库比非常多都以从键盘读取输入;但唯有当回车键按下的时候,才标记着输入完结。而略带游戏里只须求按q就会放出技巧。

    (1)上边包车型客车语句从输入中读取n个字符并存入变量variable_name;

    read -n number_of_chars variable_name

    例如:

    read -n 2 var

    echo $var

    (2)用无回显的艺术读取密码:

    read -s var

    (3)展现提示音讯:

    read -p “enter input:” var

    (4)在一按时限内读取输入:

    read -t timeout var

     

    read -t 2 var  #在2秒内将键入的字符串读入变量var

    (5)用特定的定界符作为输入行的了断:

    read -d delim_char var

     

    read -d “:” var

    hello:#var 被装置为hello

     

    006

     

    十四、循环

    (1)for循环

    for var in list;

    do

    commands;

    done

    (2)while循环

    while condition

    do

       commands;

    done

    (3)until循环

    它会一贯循环,直到给定的准绳为真。

    x=0;

    until [ $x -eq 9 ];

    do

     let x ; echo $x;

    done

     

    十三、运维命令直至实施成功

      在日常职业中运用shell时,一时候命令唯有满足某个准绳或然某种外界事件(举例文件能够被下载)操作技艺不辱职务推行。这种景观下,你或然希望重新推行命令,直到成功甘休。

    1.实例:

    根据以下形式定义函数:

    repeat()

    {

     while true

     do

    [email protected] && return

    done

    }

    如故把它放入shell的rc文件,更有利使用:

    repeat() {while true;do [email protected] && return;done}

    2.行事原理

      我们创制了函数repeat,它包蕴了贰个非常while循环,该循环实践以参数格局(通过[email protected]做客)传入函数的下令。假若命令实行成功,则赶回,从而Infiniti循环。

    3.补偿内容

    (1)一种越来越快的做法

    repeat() {while :; do [email protected] && return; done } 比第一种方法快

    (2)扩展延时

    repeat wget -c ........

    repeat() {while :; do [email protected] && return; sleep 30; done}那使得命令每30秒运维贰次。

     

    1.3 玩调换量和意况变量

    十五、正如与测验

    1.实战

    (1)if条件

    if condition;

    then

      commands;

    fi

    (2)else if和else

    if condition;

    then

      commands;

    else if condition; then

      commands;

    else

      commands;

    fi

    (3)算数比较

    l 对变量或值举办算数条件决断:

    [ $var -eq 0 ] #当$var等于0时,返回真

    [ $var -ne 0 ] #当。。。为非0时,返回真

    l -gt:大于

    l -lt:小于

    l -ge:大于或等于

    l -le:小于或等于

    (4)字符串比较

    行使字符串相比较时,最棒用双中括号,因为一时采纳单其中括号会产生错误,所以最棒避开它们。

    l [[$str1=$str2]],相等重回真

    l [[$str1==$str2]]自笔者商议字符串是不是等于的另一种写法

    l [[$str1 !=$str2]]假设str1和str2不均等,则赶回真

    l [[$str1 > $str2]]

    l [[$str1 < $str2]]

    l [[-z $str1]],固然含有的是空字符串,重临真

    l [[-n $str]],倘若带有的长短空字符串,则赶回真

    十四、循环

    (1)for循环

    for var in list;

    do

    commands;

    done

    (2)while循环

    while condition

    do

       commands;

    done

    (3)until循环

    它会直接循环,直到给定的口径为真。

    x=0;

    until [ $x -eq 9 ];

    do

     let x ; echo $x;

    done

     

    007

    1 大家能够利用pgrep来急速找到三个历程的pid,要是有多个gedti正在运行,那么大家通过pgrep gedit就足以长足驾驭那么些gedit的历程id

    十五、正如与测量检验

    1.实战

    (1)if条件

    if condition;

    then

      commands;

    fi

    (2)else if和else

    if condition;

    then

      commands;

    else if condition; then

      commands;

    else

      commands;

    fi

    (3)算数比较

    l 对变量或值进行算数条件决断:

    [ $var -eq 0 ] #当$var等于0时,返回真

    [ $var -ne 0 ] #当。。。为非0时,返回真

    l -gt:大于

    l -lt:小于

    l -ge:大于或等于

    l -le:小于或等于

    (4)字符串相比较

    行使字符串相比较时,最棒用双中括号,因为一时采纳单当中括号会发生错误,所以最佳避开它们。

    l [[$str1=$str2]],相等重返真

    l [[$str1==$str2]]检查字符串是还是不是等于的另一种写法

    l [[$str1 !=$str2]]假诺str1和str2不平等,则赶回真

    l [[$str1 > $str2]]

    l [[$str1 < $str2]]

    l [[-z $str1]],借使含有的是空字符串,再次来到真

    l [[-n $str]],尽管含有的是非空字符串,则赶回真

    Shell 小规模试制牛刀,bashshell小规模试制牛刀 一、 终端打字与印刷 [[email protected] ~]# echo welcome to bash! welcome to bash! [[email protected] ~]$ echo 'welcome to bash!' welcome to bash! [c...

    #shell 变量的使用

    2 一个变量能够通过以下方法来张开赋值 var=value,var是变量名,value是变量值,假设value不含有别的空白字符,那么她不须求采用引号来实行援引,不然就须求采纳引号进行引用

    008

    3 蒙受是未在当下进度中定义,而从父进度中继续来的变量

    #shell 处境变量

    4 export命令用来安装遭遇变量

    009

    5 获得字符串的尺寸 length=${#var},能够用来求变量var的尺寸

    echo $PATH

     

    010

    1.4 通过shell进行数学生运动算

     

    1 在bash情形中,咱们能够利用let (()) 和[]来开展着力的算数操作,在开展尖端的运算中,能够使用expr和bc

    011

    2 当使用let的时候,变量名在此以前是没有要求再增多$,举个例子let res=num1 num2

     

    3 let协理 和--等各个操作

    012

    4 操作符[]的选拔办法和let命令类似,举个例子res=$[ num1 num2 ]

    #增加一条新路径

    5 也能够运用(()),不过利用(())时,变量名以前要增添$,比如res=$(( num1 num2 ))

    013

    6 我们得以应用scale=2来将小数点位数设置为2

    export PATH="$PATH:/home/usr/bin"echo $PATH

    1.5 玩转文件呈报符和重定向

    014

    1 文件叙述符是于文件输入,输出相关联的整数,他们用来追踪与开采的文件,最广大的文书叙述符是stdin,stdout,stderr。

     

    2 文件汇报符是与二个打开的文书或数量流相关联的整数,文件陈诉符0,1和2是系统留住的

    015

    0 - stdin标准输入,1 - stdout规范输出,2 - stderr标准错误

     

    3 用上面包车型大巴艺术能够把出口文本重定向到二个文本中

    016

    echo "this ...." > out , 那样便足以把出口的字符串重定向到out文件中

    #得到字符串长度

    4 >和>>并分裂,前面三个是会先清空文件再写入内容,而后人是会将内容充实到现存的文书的尾巴

    017

    5 当使用重定向操作符的时候,重定向的内容不会油但是生在巅峰,而是直接被导入文本。重定向操作暗中认可使用正规输出

    var=123456echo ${#var}

    6 >等同于1>;对于>>来说,等同于1>>

    018

    7 借助重定向,大家得以接纳stdin那样从文件中读取数据 cmd < file

     

    8 大家能够使用exec命令成立自定义的文本陈说符

    019

    1.6 数组和涉及数组

     

    1 bash同有的时候间扶助数组和涉嫌数组,普通数组只好动用整数做为数组索引,而涉嫌数组能够行使字符串做为数组索引

    020

    2 定义数组的格局有很各种

    #获得当前shell版本

    第一种:array_var=(1 2 3 4 5),这么些值会积存在以0为起头索引的延续地点上

    021

    第二种:array_var[0]=1

    echo $SHELL

    array_var[1]=2

    022

    ......................

    echo $0

    3 打字与印刷特定成分的数组内容,${array_var[index]},将会打字与印刷处索引为index的内容

    023

    4 以清单格局打字与印刷处数组中的全体值,${array_var[*]}

     

    5 打字与印刷数组的长短${#array_var[*]}

    024

    6 在关乎数组中,大家得以行使任性的文书做为数组索引,在日常数组中,只可以用整数做为索引

     

    7 首先大家需求单独的表明语句将贰个变量名注脚为关联数组declare -A ass_array

    025

    1.7 使用外号

    #检查当前顾客是或不是一流客商

    1 别称有多样贯彻形式,可以利用函数,也得以采取alias命令

    026

    2 能够依据以下办法来创建一个外号 alias new_command='command'

    if [ $UID -ne 0 ]; then

    3 alias指令的效率只是有的时候的,大家要写在~/.bashrc中,然后用source ~/.bashrc那样就足以一劳永逸的施用小名

    027

    4 如若要刨除别名,我们得以选拔unalias只怕直接删除~/.bashrc

    echo no root user please run as root

    1.8 获取极限音信

    028

    1 获取极限的行数和列数 tput cols 和 tput lines

    else echo 'Root user's

    2 打字与印刷当前的终端名 tput longname

    029

    3 删除当前光标地点到行尾的有着剧情 tput ed

     

    1.9 获取/设置日期和延时

    030

    1 大家利用date来打字与印刷处日期

     

    2 打字与印刷纪远时 date %s,纪远时被定义为从世界标准时间1967年七月1号0时0分0秒至当下时时随处的总秒数

    031

    3 用格式串结合 作为date命令的参数,可以遵守你的挑选打字与印刷出相应的格式和日期

    #运算 let no1 , let no1=-  let no =6 let no-=6

    4 大家得以选择sleep time来延时time秒

    032

    5 tput sc是用来积存光标地点,tput rc是回复光标地方,tput ed是割除从这几天光标地点到行末的原委

    no1=4

    1.10

    033

    1 使用-x,运行追踪调节和测验shell脚本,运转带有-x标记的剧本能够打出所实行的每一行命令及当前状态

    no2=5

    2 针对各种情况,大家得以在本子中设置启用或是禁绝调节和测量试验打印

    034

    set -x 在施行时展现参数和指令

    let result=no1 no2

    set x 制止调节和测量试验

    035

    set -v 当命令进行读取时显得输入

    echo $result

    set v 禁绝打字与印刷输入

    036

    3 大家能够直接使用shebang #!/bin/bash改成#!/bin/bash -xv不用任何显项直接进行调护医疗

     

    1.11

    037

    1 函数定义

     

    function fname(){

    038

    statements

    #重定向文件  > 每一趟都会覆盖文件

    }

    039

    或者是

    echo "this is a sample 1" > temp.txt

    fname(){

    040

    statements

    #重定向 >> 追Gavin件

    }

    041

    2 只要使用函数名就能够调用有个别函数 fname,就能够实践fname函数

    # 0 - 标准输入

    3 参数能够传递给函数 fname arg1 arg2

    042

    4 类似地,参数能够传递给脚本并因此script来访问

    #1 - 规范输出

    $1 是率先个参数

    043

    $2 是第一个参数

    # 2 - 规范错误

    $n 是第n个参数

    044

    [email protected] 被扩充成"$1" “$2" "$3"

    echo "this is a sample 2" >> temp.txtecho ls > dd.txt 2>&1  

    $* 被扩张成"$1c$2c$3",在那之中c是IFS的首先个字符

    045

    [email protected] 用的相当多,由于$*把持有的参数都充任单个字符串,因而非常少被采纳

    #错误音讯和正式音信全体重定向到dd.txt中

    5 在bash中每一条命令推行之后都会回去八个值,如若是0表示实施成功,另外代表推行倒闭

    046

    1.12

     

    1 大家使用管道pipe来连接每一个过滤器,比方$cmd1 | cmd2 | cmd3,这里组合了多个指令,cmd1输出传递给cmd2,而cmd2传递给cmd3,最后输出将会被打字与印刷或导入有些文件

    047

    2 我们有三种形式赢得命令体系的出口

     

    第一种:output=$(cmd),这样就可以把cmd命令的结果输出到output上

    048

    第二种:output=`cmd`,那样就能够把cmd命令的结果输出到output上

    #概念和平运动用数组

    3 假如大家应用子shll或反援用的格局将下令的输出读入一个变量中,能够将它放入双引号中,以保留空格和换行符

    049

    1.13 字段分割符和迭代器

    arr=(1 2 3 4)

    1 内部字段分割符IFS是shell脚本中多个至关心爱护要的定义,暗许的IFS是空白字符(换行符,制表符或然空格)

    050

    2 我们得以轻便的退换差异体系

    echo ${arr[0]}

    echo {1..50} 那样能够生成八个从1到50的体系

    051

    echo {a..z} 这样能够生成a到z的连串

     

    3 for循环

    052

    for i in list

     

    do

    053

    statements

    #另一种 生命格局

    done

    054

    4 while循环

    arr[0]="test1"

    while condition

    055

    do

    arr[1]="test2"

    statements

    056

    done

    echo ${arr[0]}

     

    057

    1.14 相比和测量试验

    index=5echo ${arr[$index]}

    1 if条件

    058

    if condition

     

    then

    059

    statements

    #论及数组

    elif condition

    060

    statements

    #关联数组须要独自注脚  declare -a  arr

    else

    061

    statements

     

    fi

    062

    2 大家能够运用逻辑运算符来收缩if else的运用

    arr[0]=wangdk;

    [ condition ] && action 假使condition条件为真,那么实施action

    063

    [ condition ] || action 即使condition条件为假,那么施行action

    arr[apple]=iphone5

    3 算术比较

    064

    -eq: 相等

     

    -ne: 不相等

    065

    -gt: 大于

    也可以用

    -lt: 小于

    066

    -ge: 大于等于

    arr=([0]=wangdk [1]=test)

    -le: 小于或等于

    067

    4 文件系统相关测量检验

     

    [ -f $file ] 假如给定的文书是平时文书则赶回真

    068

    [ -x $file ] 假设给点的文件具有推行权限则赶回真

    # 列出数组索引

    [ -d $file ] 倘若给点的文件是目录则赶回真

    069

    [ -e $file ] 假若文件file存在则赶回真

    echo ${$arr[*]}

    [ -c $file ] 借使给定的文书是字符设备文件则赶回真

    070

    [ -b $file ] 要是给点的文件是块设备文件则赶回真

    echo ${!arrw[@]}

    [ -w $file ] 要是给点的公文具备可些权限则赶回真

    071

    [ -r $file ] 借使文件file具备可读权限则赶回真

     

    [ -L $file ] 借使给点的文书file是叁个标识链接文件则赶回真

    072

    5 字符串相比

    #命令外号

    1 使用字符串比较的时候,最棒使用双中括号,因为偶然采取单其中括号会产生错误

    073

    2 [[ $str1 = $str2 ]],当str1等于str2的时候,返回真

    alias new_command='command"

    [[ $str1 != $str2 ]],当str1不等于str2的时候,返回真

    074

    [[ $str1 > $str2 ]],当str1大于str2的时候,返回真

    # 外号有的时候生效

    [[ $str1 < $str2 ]],当str1小于str2的时候,返回真

    075

    [[ -z $str ]]假若str是空字符串再次来到真

    alias install='yum -y install'

    [[ -n $str ]]假定str是非空字符串则赶回真

    076

    6 test命令一样能够用来实践尺度检查测验,有利于幸免过多的括号

    # 永恒生效

    简单介绍 1 开采终端后,就汇合世多个唤起符,情势平日如下 [email protected]$ 或者[email protected]# 2 $表示的是普通客商,#意味着的是一级顾客。顶级...

    077

    echo 'alias cmd="command" >> ~/.bashrc

    078

     

    079

    #屏蔽终端输入

    080

    echo -e "Enter password:"

    081

    stty -echo  #屏蔽输出

    082

    read password

    083

    stty echo  #开发输出

    084

    echo

    085

    echo Password read.

    086

     

    087

     

    088

    #光阴相关命令脚本

    089

    date   #时间

    090

    date %s  时间戳

    091

    date --date "二零一三-10-20 12:00:00" %s  日期转时间戳

    092

    date --date "@1370059200" %D           时间戳转日期

    093

    date --date "@1370059200" " %Y/%m/%d %H:%M:%S"

    094

     

    095

    #检查一组命令所急需的时日

    096

    #!/bin/bash

    097

    start=$(date %s)

    098

    commands

    099

    end=$(date %s)

    100

    difference = $((end - start))

    101

     

    102

       

    103

    #sleep 总括时间循环

    104

     

    105

    #输出三个Count

    106

    echo -n Count

    107

    # 存款和储蓄光标地方

    108

     

    109

    tput sc

    110

     

    111

    #初叶化变量

    112

    count=0

    113

    while true

    114

    do

    115

    # 如果<40

    116

    if [ $count -lt 40 ];

    117

    # 自增

    118

    then let count ;

    119

    sleep 1;

    120

     

    121

    #还原光标

    122

    tput rc

    123

    tout ed

    124

    # 输出

    125

    echo -n $count;

    126

    else exit 0;

    127

    fi

    128

    done

    129

     

    130

    #shell 函数定义 传参

    131

    #/bin/bash

    132

    #filename function

    133

    function fname()

    134

    {

    135

      echo $1, $2; #打字与印刷参数1, 参数2

    136

      echo "[email protected]"; #以列表的法门一遍性打字与印刷打字与印刷

    137

      echo "$*"; #类似于[email protected] 不过参数被当做单位打字与印刷

    138

      return 0;  #返回值

    139

    }

    140

    fname wangdk, sunshuzhen; #调用函数

    141

    echo $?  #近年来函数再次来到值

    142

     

    143

    #预读命令

    144

    cmd_output=$(ls | cat -n)

    145

    echo $cmd_output

    146

     

    147

    #另一种反引用

    148

    cmd_output=` ls } cat -n`

    149

    echo $cmd_output

    150

     

    151

    #经过引用子shell的法门保存空格和换行符

    152

    cat text.txt  #输出过滤空格

    153

     

    154

    out="$(cat text.txt)"

    155

    echo $out  #有限支撑原样

    156

     

    157

    #rand 命令 读取命令行字符

    158

     

    159

    read -n 2 var  # 读取2个字符到 var 变量

    160

    echo $var

    161

     

    162

    read -s var  # 用不回显得读取密码

    163

    echo $var

    164

     

    165

    read -p "Enter input :" var

    166

    echo $var;

    167

     

    168

    read -t 2 var #在2秒内读取变量

    169

    echo $var

    170

     

    171

    read -d ":"  var  #欣逢字符: 才结束变量

    172

    echo $var

    173

     

    174

    #IFS字符分隔符和迭代器

    175

    #IFS是系统订购的分割符号,暗中认可为空白字符,制表符和空格

    176

    data="name,sex,rollno,location"

    177

    oldIFS=$IFS

    178

    IFS=,

    179

    for item in $data

    180

    do

    181

    echo Item: $item

    182

    done

    183

    IFS=$oldIFS

    184

     

    185

     

    186

     

    187

    # IFS例子

    188

    #!/bin/bash

    189

    #filename

    190

    data="root:x:0:0:root:/root:/bin/bash"

    191

    oldIFS=$IFS

    192

    IFS=":"

    193

    count=0

    194

    for item in $data

    195

    do

    196

    [ $count -eq 0 ] && user=$item

    197

    [ $count -eq 6 ] && shell=$item

    198

    let count

    199

    done

    200

    echo $user

    201

    echo $shell

    202

    IFS=$oldIFS

    203

     

    204

    #不亮堂除了 for item in $data 还应该有任何命令帮助么

    205

    #shell 循环迭代

    206

     

    207

    for var in list;

    208

    do

    209

    commands;

    210

    done

    211

     

    212

    #生成数组类别

    213

     

    214

    for i in {a..z};

    215

    for i in (1..50};

    216

     

    217

    while  condition

    218

    do

    219

    commands;

    220

    done

    221

     

    222

    condition 用true 作为循环条件能发生有线循环

    223

     

    224

     

    225

    until 循环

    226

    在bash中仍能够使用三个奇特的循环until 它会一向循环到给到定的尺码

    227

    x=0

    228

    until [ $x -eq 9];

    229

    do

    230

    let x

    231

    echo $x

    232

    done

    233

     

    234

     

    235

    #逻辑推断结构

    236

    if condition;

    237

    then

    238

    commands;

    239

    fi

    240

     

    241

    if condition;

    242

    then

    243

    commands

    244

    elif condition;

    245

    else

    246

         commands

    247

    if

    248

     

    249

    # 简洁版本

    250

    [ condition ] && action;  # 如果condition为真, 则执行action

    251

    [ condition ] || action      #如果condition 为假,   则执行action

    252

     

    253

    # && 是逻辑运算符 || 逻辑或运算符

    254

     

    255

    # -gt   大于

    256

    #-lt     小于

    257

    #-ge   大于或等于

    258

    #-le    小于等于

    259

    #-eq   等于

    260

    #-ne   不等于

    261

     

    262

    #文件系统相关测量检验

    263

    [ -f $file_var ] # 若是个定的变量富含不奇怪的文件路径或文件名,则赶回真

    264

    [-x $var ] # 假如给定的变量包涵文件可实施,则赶回真

    265

    [-d $var]  # 如若给的变量包括目录,则赶回真

    266

    [-e $var]  # 假设变量包含文件的留存,则赶回真

    267

    [-c $var]  # 倘诺变量饱含一个字符设备文件的门道,则赶回真

    268

    [-b $var]  #设若变量包罗一块设备文件的不二等秘书籍,则赶回真

    269

    [-w $var]  #假若变量文件可写,则赶回真

    270

    [-r  $var]  #如若变量文件是不是可读,则赶回真

    271

    [-L $var]  #比方变量包括一个标记链接,则赶回真

    272

     

    273

    #字符串相比

    274

    [ [ $str1 = $str2 ] ] #等于重临真

    275

    [ [ $str1 == $str2 ] ] # 相等回到真

    276

    [ [ $str1 != $str2 ] ] # 不等于再次回到真

    277

    [ [ $str1 > $str2 ] ] #设若str1的字母顺序比str2大,则赶回真

    278

    [ [ $str1 < $str2 ] ] #假定str1的假名逐个比str2小,则赶回真

    279

    [ [ -z $str ] ]  # 如若str1包涵的空字符串,则赶回真

    280

    [ [ -n $str] ] #万一str1 包罗非空字符串,则赶回真

    281

     

    282

    #结合决断

    283

    if [ [ -n $str ] ] && [ [ -z $str2 ] ];

    284

    then

    285

    commands;

    286

    fi

    287

     

    288

    #test 命令可以省去中扩号

    289

     

    290

    if [ $var -eq 0 ]; then echo "true"; fi

    291

    if test $var -eq 0; then  echo 'true'; fi

     

    001 #!/bin/bash 002 fruit=apple 003 count=5 004 echo We have $count ${fruit}(s) 005 006 007 #shell 变量的选拔 008 #shell 情形变量 009 echo $PATH 010 011...

    本文由新葡亰496net发布于电脑系统,转载请注明出处:shell脚本入门,Linuxshell脚本攻略第一章小试牛刀

    关键词:

上一篇:Linux系统命令行的利用,学习笔记

下一篇:没有了