zoukankan      html  css  js  c++  java
  • SHELL学习笔记一

    SHELL学习笔记一

    SHELL学习笔记二

    SHELL学习笔记三

    使用多个命令

    使用变量

    输入输出重定向

    管道

    数学运算

    退出脚本

    使用多个命令

    $ date ; who 
    Mon Feb 21 15:36:09 EST 2014 
    Christine tty2         2014-02-21 15:26 
    Samantha tty3         2014-02-21 15:26 
    Timothy  tty1         2014-02-21 15:26 
    user     tty7         2014-02-19 14:03 (:0) 
    user     pts/0        2014-02-21 15:21 (:0.0) 

    使用变量

    环境变量

    $ cat test2 
    #!/bin/bash 
    # display user information from the system. 
    echo "User info for userid: $USER" 
    echo UID: $UID 
    echo HOME: $HOME 
    $ echo "The cost of the item is $15" 
    The cost of the item is 5 
    反斜线允许shell脚本将美元符解读为实际的美元符,而不是变量
    $ echo "The cost of the item is $15"
    The cost of the item is $15 

    用户变量

    $ cat test3 
    #!/bin/bash 
    # testing variables 
    days=10 
    guest="Katie" 
    echo "$guest checked in $days days ago" 
    days=5 
    guest="Jessica" 
    echo "$guest checked in $days days ago" 
    $ 
    运行脚本会有如下输出。 
    $ chmod u+x test3 
    $ ./test3 
    Katie checked in 10 days ago 
    Jessica checked in 5 days ago 
    $ 

    命令替换

    有两种方法可以将命令输出赋给变量:
    反引号字符( ` )
    $() 格式

    testing='date' 
    或
    testing=$(date) 
    通过命令替换获得当前日期并用它来生成唯一文件名。 
    #!/bin/bash 
    # copy the /usr/bin directory listing to a log file 
    today=$(date +%y%m%d) 
    ls /usr/bin -al > log.$today 
    
    $ date +%y%m%d 
    140131 
    $ 

    警告  命令替换会创建一个子shell来运行对应的命令。子shell(subshell)是由运行该脚本的shell所创建出来的一个独立的子shell(child shell)。正因如此,由该子shell所执行命令是无法使用脚本中所创建的变量的。
     在命令行提示符下使用路径 ./ 运行命令的话,也会创建出子shell;要是运行命令的时候不加入路径,就不会创建子shell。如果你使用的是内建的shell命令,并不会涉及子shell。在命令行提示符下运行脚本时一定要留心!

    重定向输入和输出

     输出重定向

    command > outputfile

    $ date > test6 
    $ ls -l test6 
    -rw-r--r--    1 user     user           29 Feb 10 17:56 test6 
    $ cat test6 
    Thu Feb 10 17:56:58 EDT 2014 
    $ 

    command < inputfile

    wc 命令可以对对数据中的文本进行计数。默认情况下,它会输出3个值:

    •  文本的行数
    •  文本的词数
    •  文本的字节数
    $ wc < test6 
          2      11      60 
    $ 

    管道

    command1 | command2

    执行数学运算

    expr 命令

    • ARG1 | ARG2  如果ARG1既不是null也不是零值,返回ARG1;否则返回ARG2  
    • ARG1 & ARG2  如果没有参数是null或零值,返回ARG1;否则返回0  
    • ARG1 < ARG2  如果ARG1小于ARG2,返回1;否则返回0  
    • ARG1 <= ARG2  如果ARG1小于或等于ARG2,返回1;否则返回0  
    • ARG1 = ARG2  如果ARG1等于ARG2,返回1;否则返回0  
    • ARG1 != ARG2  如果ARG1不等于ARG2,返回1;否则返回0  
    • ARG1 >= ARG2  如果ARG1大于或等于ARG2,返回1;否则返回0  
    • ARG1 > ARG2  如果ARG1大于ARG2,返回1;否则返回0  
    • ARG1 + ARG2  返回ARG1和ARG2的算术运算和
    • ARG1 - ARG2  返回ARG1和ARG2的算术运算差
    • ARG1 * ARG2  返回ARG1和ARG2的算术乘积
    • ARG1 / ARG2  返回ARG1被ARG2除的算术商
    • ARG1 % ARG2  返回ARG1被ARG2除的算术余数
    • STRING : REGEXP  如果REGEXP匹配到了STRING中的某个模式,返回该模式匹配
    • match STRING REGEXP  如果REGEXP匹配到了STRING中的某个模式,返回该模式匹配
    • substr STRING POS LENGTH  返回起始位置为POS(从1开始计数)、长度为LENGTH个字符的子字符串
    • index STRING CHARS  返回在STRING中找到CHARS字符串的位置;否则,返回0  
    • length STRING  返回字符串STRING的数值长度
    • + TOKEN  将TOKEN解释成字符串,即使是个关键字
    • (EXPRESSION)  返回EXPRESSION的值
    $ cat test6 
    #!/bin/bash 
    # An example of using the expr command 
    var1=10 
    var2=20 
    var3=$(expr $var2 / $var1) 
    echo The result is $var3 
    要将一个数学算式的结果赋给一个变量,需要使用命令替换来获取 expr 命令的输出: 
    $ chmod u+x test6 
    $ ./test6 
    The result is 2 
    $ 

     使用方括号

    $ cat test7 
    #!/bin/bash 
    var1=100 
    var2=50 
    var3=45 
    var4=$[$var1 * ($var2 - $var3)] 
    echo The final result is $var4 
    $ 
    运行这个脚本会得到如下输出。 
    $ chmod u+x test7 
    $ ./test7 
    The final result is 500 
    $ 

    浮点解决方案

    bc的基本用法

    bash计算器实际上是一种编程语言,它允许在命令行中输入浮点表达式,然后解释并计算该
    表达式,最后返回结果。bash计算器能够识别:

    •  数字(整数和浮点数)
    •  变量(简单变量和数组)
    • 注释(以#或C语言中的 /* */ 开始的行)
    • 表达式
    • 编程语句(例如 if-then 语句)
    • 函数

    浮点运算是由内建变量 scale 控制的。scale 变量的默认值是 0 。

    $ bc -q 
    3.44 / 5 
    0 
    scale=4 
    3.44 / 5 
    .6880 
    quit 
    $ 

     在脚本中使用bc

    $ cat test10 
    #!/bin/bash 
    var1=100 
    var2=45 
    var3=$(echo "scale=4; $var1 / $var2" | bc) 
    echo The answer for this is $var3 
    $ 
    #脚本定义了两个变量,它们都可以用在 expression 部分,然后发送给 bc 命令。别忘了用美元符表示的是变量的值而不是变量自身。这个脚本的输出如下。 
    $ ./test10 
    The answer for this is 2.2222 
    $ 

    退出脚本

    shell中运行的每个命令都使用退出状态码(exit status)告诉shell它已经运行完毕。退出状态码是一个0~255的整数值,在命令结束运行时由命令传给shell。可以捕获这个值并在脚本中使用。

    查看退出状态码

    • 0  命令成功结束
    • 1  一般性未知错误
    • 2  不适合的shell命令
    • 126  命令不可执行
    • 127  没找到命令
    • 128  无效的退出参数
    • 128+x  与Linux信号x相关的严重错误
    • 130  通过Ctrl+C终止的命令
    • 255  正常范围之外的退出状态码
    $ asdfg 
    -bash: asdfg: command not found 
    $ echo $? 
    127 
    $ 

    exit 命令

    退出状态码被缩减到了0~255的区间。shell通过模运算得到这个结果。一个值的模就是被除后的余数。最终的结果是指定的数值除以256后得到的余数。在这个例子中,指定的值是 300 (返回值),余数是44,因此这个余数就成了最后的状态退出码。

    $ cat test14b 
    #!/bin/bash 
    # testing the exit status 
    var1=10 
    var2=30 
    var3=$[$var1 * $var2] 
    echo The value is $var3 
    exit $var3 
    $ 
    
    $ ./test14b
    The value is 300 
    $ echo $? 
    44 
    $  
  • 相关阅读:
    Python机器学习(五十一)SciPy 介绍
    Python机器学习(五十)NumPy 线性代数
    Python机器学习(四十九)NumPy 矩阵库函数
    Python机器学习(四十八)NumPy 副本和视图
    Python机器学习(四十七)NumPy 排序、查找、计数
    Python机器学习(四十六)NumPy 统计函数
    Python机器学习(四十五)NumPy 数学函数
    Python机器学习(四十四)NumPy 字符串函数
    Python机器学习(四十三)NumPy 位运算
    Python机器学习(四十二)NumPy 数组迭代
  • 原文地址:https://www.cnblogs.com/aongao/p/11730974.html
Copyright © 2011-2022 走看看