shell脚本编程书籍笔记-11章构建基本脚本

前言:学习写shell脚本ing……

本章概要:

多命令分号分开 ,创建shell脚本,美元符引用变量,变量赋值,

反引号或$()捕获命令输出,大于号重定向输出结果,双大鱼号追加数据,

小于号输入重定向,管道符号命令重定向,

expr整数简便运算,$[]内执行基本的数学运行,bc计算器执行浮点运算,退出状态码

目录

  1. 多命令使用与创建shell脚本

  2. 显示消息与使用变量

  3. 重定向输入输出与管道

  4. 数学运算与退出脚本


一、多命令使用与创建shell脚本

1.使用多个命令

date;who ###用;隔开即可

2.创建shell脚本

  1. 创建文件

  2. 编写脚本

  3. 指定路径

    需要告诉shell,你的脚本在哪里,两种方案

    3.1 将shell脚本文件所处的目录添加到PATH环境变量中(shell会通过PATH环境变量来查找命令);
    3.2 在提示符中用绝对或相对文件路径来引用shell脚本文件。

  4. 更改权限

    代码如下

    vim tmp#创建文件并编辑
    ### 输入,按i进入编辑模式,可输入内容,按esc后,:wq保存退出
    #!/bin/bash  
    date
    who
    ##赋予权限
    chmod u+x tmp
    ##执行
    ./tmp
    

二、显示消息与命令替换

1.显示消息

利用echo命令显示消息代码如下

echo This is a test
#This is a test
echo Let's see if this'll work
#Lets see if thisll work
echo "This is a test to see if you're paying attention"
#This is a test to see if you're paying attention
 echo 'Rich says "scripting is easy".'
#Rich says "scripting is easy".

注意点:

  1. echo命令是shell脚本中与用户交互的重要工具
  2. echo命令通常情况下无需加引号
  3. 当echo的消息中存在引号时,需要添加另外一种引号,上述代码所示
  4. 如果想把文本字符串和命令输出显示在同一行中,用echo语句
    的-n参数。echo -n "The time and date are: "。需要在字符串的两侧使用引号,保证要显示的字符串尾部有一个空格。

2.使用变量

  • 环境变量
  1. shell维护着一组环境变量,用来记录特定的系统信息

  2. 可用set命令显示

  3. 在脚本中可用$来调用,前面的PATH也是环境变量

  4. ==反斜线的使用==:只要脚本在引号中出现美元符,它就会以为你在引用一个变量,

    要使它成为美元符之意,需在前面加上反斜线\,如

    echo "The cost of the item is $15"
    #The cost of the item is 5 上面语句引用了变量1(未定义),在显示数字5
    echo "The cost of the item is \$15"
    #The cost of the item is $15
    
  • 用户变量

    1. 用等号将值赋给用户变量

    2. 在变量、等号和值之间不能出现空格

    3. 引用一个变量值时需要使用美元符,在赋值语句中使用value1变量的值时,仍然必须用美元符。

      #变量赋值示意
      var1=10
      var2=-57
      var3=testing
      var4="still more testing"
      
      #!/bin/bash
      # assigning a variable value to another variable
      value1=10
      value2=$value1 ##变量2引用变量1,仍需加美元符,不然输出为字符value1
      echo The resulting value is $value2
      

3.命令替换

  1. 从命令输出中提取信息,并将其赋给变量

  2. 有两种方法可以将命令输出赋给变量:

    反引号字符(`)

    $()格式

    testing='date'
    testing=$(date)
    
  3. 常见的例子

    #!/bin/bash
    # copy the /usr/bin directory listing to a log file
    today=$(date +%y%m%d)#+%y%m%d格式告诉date命令将日期显示为两位数的年月日的组合。
    ls /usr/bin -al > log.$today
    

三、重定向输入和输出与管道

1.重定向输入与输出

目的是为了保存输出的结果

  • 输出重定向

    1. 用大于号(>)来完成(如果输出文件已经存在了,重定向操作符会用新的文件数据覆盖已有文件)
    2. 不想覆盖文件原有内容,可以用双大于号(>>)来追加数据。
  • 输入重定向

    1. 输入重定向符号是小于号(<)

    2. 内联输入重定向。这种方法无需使用文件进行重定向,只需要在命令行中指定用于输入重定向的数据就可以了。符号是远小于号(<<)。

      ==注意==:

      必须指定一个文本标记来划分输入数据的开始和结尾。

      在命令行上使用内联输入重定向时,shell会用PS2环境变量中定义的次提示符
      来提示输入数据

  • 示例

date > test6
date >> test6
wc < test6
wc << EOF
> test string 1
> test string 2
> test string 3
> EOF
#3 9 42 #共三行,9个单词,42个字符

2.管道

将一个命令的输出作为另一个命令的输入,command1 | command2,用(|)符号即可

四、数学运算与退出脚本

1.数学运算

  • expr命令
  1. 特别笨拙
  2. 所以不用他
  • 使用方括号
  1. 用美元符和方括号($[ operation ])将数学表达式围起来。
  2. 只支持整数运算
  • 浮点解决方案
  1. 内置计算器bc,通过bc命令即可访问,退出输入quit
  2. 希望得到小数需要改scale变量
  3. 在脚本中使用bc
    variable=$(echo "options; expression" | bc)
  4. 使用内联重定向,将选项和表达式放在脚本的不同行中可以让处理过程变得更清晰,提高易读性。
    variable=$(bc << EOF
    options
    statements
    expressions
    EOF
    )
  • 示例
expr 1 + 5
expr 5 \* 2 ###需使用\来使*为乘法之意,而不是通配符
var1=$[1 + 5]
var2=$[$var1 * 2]##方括号就不要
bc
3.156 * (3 + 5)
25.248
quit
cat test9
#!/bin/bash
var1=$(echo "scale=4; 3.44 / 5" | bc)
echo The answer is $var1
cat test12
#!/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

2.退出脚本

目的是为了知道脚本的运行情况

  • 查看退出状态码
  1. 一个专门的变量$?保存上个已执行命令的退出状态码。
  2. 如需查看运行情况,须立即查看 echo $?
  3. 成功结束的命令的退出状态码是0。有错误,退出状态是一个正数值
  • exit命令
  1. exit命令允许你在脚本结束时指定一个退出状态码。
  2. 当查看脚本的退出码时,你会得到作为参数传给exit命令的值或变量值。
  • 示例
date
#Sat Jan 15 10:01:30 EDT 2014
echo $?
0
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容