构建基本脚本(shell08)

本文介绍了Linux shell脚本中的基本概念,包括命令替换、输出和输入重定向、管道以及数学运算。讲解了expr命令的使用、方括号进行整数运算,还提到了浮点数计算的bc命令。此外,还讨论了脚本的退出状态码和exit命令的应用。这些内容对于理解并编写shell脚本至关重要。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

构建基本脚本

命令替换

shell脚本中最有用的特性之一就是可以从命令输出中提取信息,并将其赋给变量 。

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

  • 反引号字符( `)
  • $()格式
testing=$(date)
echo "The date and time are: " $testing

The date and time are: Mon Jan 31 20:23:25 EDT 2014

输出重定向

最基本的重定向将命令的输出发送到一个文件中。 bash shell用大于号( >)来完成这项功能:

command > outputfile

之前显示器上出现的命令输出会被保存到指定的输出文件中。

可以用双大于号( >>)来追加数据

输入重定向

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

command < inputfile

一个简单的记忆方法就是:在命令行上,命令总是在左侧,而重定向符号“指向”数据流动的方向。小于号说明数据正在从输入文件流向命令。

一种输入重定向的方法,称为内联输入重定向( inline input redirection)。 你必须指定一个文本标记来划分输入数据的开始和结尾。任何字符串都可作为文本标记,但在数据的开始和结尾文本标记必须一致。

command << marker
data
marker

管道

不要以为由管道串起的两个命令会依次执行。 Linux系统实际上会同时运行这两个命令,在系统内部将它们连接起来。在第一个命令产生输出的同时,输出会被立即送给第二个命令。数据传输不会用到任何中间文件或缓冲区。

command1 | command2

执行数学运算

expr 命令

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的值
使用方括号

var1=$[1 + 5]

将一个数学运算结果赋给某个变量时,可以用美元符和方括号( $[ operation ])将数学表达式围起来。

同样,注意在使用方括号来计算公式时,不用担心shell会误解乘号或其他符号。 shell知道它 不是通配符,因为它在方括号内。

bash shell数学运算符只支持整数运算。若要进行任何实际的数学计算,这是一个巨大的限制。

浮点解决方案
bc的基本用法

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

bash计算器能够识别:

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

退出脚本

查看退出状态码

Linux提供了一个专门的变量 ? 来保存上个已执行命令的退出状态码。对于需要进行检查的命令,必须在其运行完毕后立刻查看或使用 ?来保存上个已执行命令的退出状态码。对于需要进行检查的命令,必须在其运行完毕后立刻查看或使用 ?来保存上个已执行命令的退出状态码。对于需要进行检查的命令,必须在其运行完毕后立刻查看或使用?变量。它的值会变成由shell所执行的最后一条命令的退出状态码。

按照惯例,一个成功结束的命令的退出状态码是0。如果一个命令结束时有错误,退出状态码就是一个正数值。

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

exit 命令

默认情况下, shell脚本会以脚本中的最后一个命令的退出状态码退出。

你可以改变这种默认行为,返回自己的退出状态码。 exit命令允许你在脚本结束时指定一个退出状态码。

退出状态码被缩减到了0~ 255的区间。 shell通过模运算得到这个结果。一个值的模就是被除后的余数。

exit n
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

omnibots

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值