zoukankan      html  css  js  c++  java
  • 脚本的基本编译

      从本节开始,正式进入shell脚本编辑。

    1、使用多条命令

      如果想使用两条命令同时运行,可以使用 分号 隔开来执行;

      例如:date ; who

      注意,这种方式下面,单条命令的最大字符数量不能超过255个字符;

    2、创建脚本文件

    #!/bin/bash  

      #在普通的shell脚本中,# 符号作为注释行,默认shell脚本不处理注释行,但是第一行例外。这一行用来告诉系统,以下均为shell程序命令;

    #!/bin/bash
    #This script displays the date and who's logged on
    date
    who

      在shell脚本中,程序执行都是按照顺序由上至下的进行运行的;

      如果想执行这个脚本程序,可以将文件添加到PATH路径中,或是使用全路径来执行这个脚本程序;

      第二种执行方式:

    chmod u+x test1
    ./test1

    3、显示消息

      大多数的shell命令生成自己的输出,这些输出在运行该脚本的控制台监视器上输出相应的信息,来帮助客户知道发生了什么事情;

    #!/bin/bash
    #This script displays the date and who's logged on
    echo The time adn date are;
    date
    echo "Let's see who's logged into the system:"
    who
    chmod u+x test1
    ./test1

      echo命令再输出内容的时候默认在最后输出一个回车,此时,为了让结果和文本字符串在同一行显示,我们使用 -n 参数来实现

    echo -n "The time and date are:"

      输出结果如下:

    4、使用变量

      在shell脚本中,我们不是仅仅只处理命令,还需要加入变量,结合数据来实现对应的功能;

      4.1、环境变量

        首先,在shell脚本中就可以应用对应环境变量,通过set命令就可以查看到;

    #!/bin/bash
    #display user information from the system
    echo “User info for userid:$USER”
    echo UID: $UID
    echo HOME: $HOME
    chmod u+x test2
    ./test2

        这样的话,就会显示当前用户的UID和HOME目录;

        在shell脚本程序中,如果你需要使用符号本身的含义,是需要使用    反斜线来还原符号本身的含义的

    echo "The cost of th item is $15"

      4.2、用户变量

        除了系统自带的环境变量,在shell脚本程序中,Linux系统是支持使用自己的定义的本地变量的;也就是用户变量;

        但是要注意,用户变脸的字符不能操作20个字符字母、数字或者下划线。变量名称是区分大小写的Var1和var1是不一样的。并且通过等号,来给变量赋值;

    var1=10
    var2=-57
    var3=testing
    var="still more testing"

        用户变量再shell脚本周期内生效,如果shell脚本执行结束,这个变量也随之被删除;

    #!/bin/bash
    #testing variables
    days=10
    guest="Katie"
    echo "$guset checked in $days days ago"
    days=5
    guset="Jessica"
    echo "$guset checked in $days days ago"
    chmod u+x test3
    ./test3

        脚本由上向下执行,变量重新复制都会覆盖掉之前所有的值;

    #!/bin/bash
    #assigning a variable value to another variable
    value1=10
    value2=$value1
    echo The resulting value is $value2
    chmod u+x test4
    ./test4

        其中$value1值赋给value2的时候必须加上 $ 符号

      4.3、反引号

        反引号所引起来的内容,如果是命令,则会将命令的执行结果取出来,并赋值给对应的变量;

    #!/bin/bash
    #using the backtick character
    testing=`date`echo "The date and time are:" $testing
    chmod u+x test5
    ./test5

        此时,输出的就是date这个内容,就是执行date命令所看到的内容

    #!/bin/bash
    # copy th /usr/bin directory listing to a log file
    today=`date +%y%m%d`
    ls /usr/bin -al > log.$today
    chmod u+x test6
    ./test6

        这样就将ls /usr/bin -al 查看到的内容,复制给对应的目录,且这个目录后缀为今天的时间,这个操作在真实的工作环境下是经常使用的;

    5、重定向输入输出

      有时候,我们想保存命令的输出,而不是显示出来。bash shell提供了几种操作符来实现;

      5.1、输出重定向

        command > outputfile

    date > test6
    ls -l test6
    cat test6
    who > test6
    cat test6

        如果是追加文件的话,我们就需要使用 >>

    date >> test6
    cat test6

      5.2、输入重定向

        command < inputfile  它主要是将一个文件的内容重定向到一条命令中去;

    wc < test6  #将test6这个文件交给wc来执行

        wc命令:在wc命令下生成的三个值

          文本的行数

          文本的单词书

          文本的字节数

        内置输入重定向符号为两个小于号 <<;我们需要指定一个文本标记来说明数据输入的开始和结尾。文本标记可以使用任意字符,但是开始和结尾必须相同

    wc << EOF
    >test string 1
    >test string 2
    >test string 3
    > EOF

    6、管道

      command1 | command2  #将command1命令的结果输出给command2来执行;

    rpm -qa | sort | more
    rpm -qa | sort > rpm.list  #查看安装的所有软件,同时进行排序,并将结果输入到rmp.list文件中

    7、数学计算

       在shell脚本程序中,使用数学运算是必须的;

      7.1、expr 命令

        可以通过expr来进行数学运算

    expr 1+5

        expr命令能够区分一些不同的数学操作符合字符串的操作符,如下表:

    expr 5 * 2  #对于有些符号,具有特定意义的,需要使用反斜线,恢复其本身意思;
    #!/bin/bash
    # An example of using the expr command
    var1=10
    var2=20
    var3='expr $var2 / $var1'
    echo The result is $var3
    chmod u+x test6
    ./test6 

      7.2、使用括号

        ($[operation])

    var1=$[1 + 5]
    echo $var1
    var2=$[$var1 * 2]
    echo $var2

        与使用expr命令相比,使用括号使用shell数学运算变的更加简单。

    #!/bin/bash
    var1=100
    var2=50
    var3=45
    var4=$[$var1 * ($var2 - $var3)]
    echo The final result is $var4
    chmod u+x test7
    ./test7

        使用括号的方式来进行算数运算,无需当心符号错误;

    #!/bin/bash
    var1=100
    var2=45
    var3=$[$var1 / $var2]
    echo The final result is $var3
    chmod u+x test8
    ./test8

        上面运行脚本的结果为2,是一个整形,这里属于数据类型的结果,正确情况下需要回复一个浮点数据才是正确的;

      7.3、浮点解决方案

        解决浮点运算问题最简单的方式就是使用bc计算器;

        1、bc的基础知识

        bash计算器可以识别的数据类型:1、数字(包括整数和浮点);2、变量(简单变量和数组);3、注释(以英镑符号开始的行或者C育婴的/* */对);4、表达式;5、编程语句(如if-then语句);6、函数;

    bc
    12 * t.4
    3.156 * (3 + 5)
    quit

        scale参数控制浮点计算后支持几位数值:

    bc -q
    3.44 / 5
    scale=4
    3.44 / 5

        或者则会像是小数点后4为,这就是通过scale参数来控制的;

        同时,在bc计算器中,也可以使用变量来进行匀速昂;

    bc -q
    var1=10
    var1 * 4
    var2 = var1 / 5
    print var2
    quit

        2、在脚本中使用bc

        在shell脚本中使用bc计算器,来进行浮点计算;

        用法:variable=`echo "options; expression" | bc`

    #!/bin/bash
    var1=`echo " scale=4; 3.44 / 5" | bc`
    echo The answer is $var1
    chmod u+x test9
    ./test9

        为了不再受到数字的限制,我们使用变量来实现运算

    #!/bin/bash
    var1=100
    var2=45
    var3=`echo "scale=4; $var1 / $var2" | bc`
    echo The answer for this is $var3
    chmod u+x test10
    ./test10

        当然,如果继续赋值了的话,可以再给其他的运行式进行运算

    #!/bin/bash
    var1=20
    var2=3.14159
    var3=`echo "scale=4; $var1 * $var2" | bc`
    var4=`echo "scale=4; $var3 * $var2" | bc`
    echo The final result is $var4

        对于简短的计算这种方法很好,但是有时数字多了,就会显示的很混乱;

        这个问题有个简单的解决方法。bc命令能够是被输入重定向,容许把文件重定向到bc命令中进行处理。然而,这同样容易混淆,因为需要在文件中存储表达式;

        还可以使用内置输入重定向的方式,而不是用文件重定向。在shell中,可以把输出赋值给变量。如下:

    variable=`bc << EOF 
    options 
    statements 
    expressions 
    EOF 
    `

        EOF文本字符串表明内置重定向数据的开始和末尾。记住任然需要使用反引号将bc命令输出的值赋给变量。

        现在可以把所有单独的bash计算器元素放到脚本的单独行中。

    #!/bin/bash
    var1=10.46
    var2=43.67
    var3=33.2
    var4=71
    
    var5=`bc << EOF
    scale = 4
    a1 = ( $var1 + $var2 )
    b1 = ( $var3 * $var4 )
    a1 + b1
    EOF
    `
    echo The final answer for this mess is $var5

    8、退出脚本

      shell脚本中的命令都是使用一个退出状态。这个退出状态介于0和255之间的整数值,当命令运行完成使,命令就会把退出状态传递给shell。可以捕捉这个值并在您的脚本中使用它。

      8.1、核对退出状态

        $?  特殊变量输出最后一条命令执行的转态。如果向核对上一条命令的执行状态,需要在这条命令后直接 echo $?;

    date
    echo $?

        若果是错误的状态,则会放回非0的结果

    afdas
    echo $?

        常见的返回状态:

          0  #命令执行成功

          1  #未知的错误

          2  #误用shell命令

          126  #命令无法执行

          127  #没有找到命令

          128  #无效的退出参数

          128+x  #使用Linux信号x的致命错误

          130  #使用ctrl+c终止的命令

          255  #规范外的退出转态

    ~]#./myprog.c
    -bash: ./myprog.c:Permission denied
    ~]#echo $?
    126
    ~]#date %t
    date: invalid date '%t'
    ~]#echo $?
    1

      8.2、退出命令

        指定一个脚本的退出状态

    #!/bin/bash
    #testing the exit status
    var1=10
    var2=30
    var3=$[ $var1 + $var2 ]
    echo The answer is $var3
    exit 5
    chmod u+x test13
    ./test13
    echo $?

        这样的话,去检查脚本的退出状态码就不是默认的0了,而是最后我们指定的5;

        同时退出转态码,也可以使用变量

    #!/bin/bash
    #testing the exit status
    var1=10
    var2=30
    var3=$[ $var1 + $var2 ]
    exit $var3

        这样,退回的转态码就是$var3的值;

        应该谨慎使用退出状态码,因为退出状态码最高是255。如果超出这个范围,运算结果就是那个特定的书被256除了之后的余数。

        在if-then语句中,退出状态码尤其重要;

        

  • 相关阅读:
    java8学习笔记之lambda表达式
    spring注解value的用法
    mybites
    spring bean的初始化以及销毁
    java并发之线程间通信
    mybatis常见问题和错误
    hadoop安装问题记录
    linux 常用命令
    省选模拟98 题解
    省选模拟97 题解
  • 原文地址:https://www.cnblogs.com/BurnovBlog/p/10781118.html
Copyright © 2011-2022 走看看