退出状态码
壳中运行的每个命令都使用<>强退出状态码(退出状态)>强。退出状态码是一个0 ~ 255的整数,在命令结束运行时有命令传给壳。
查看退出状态码
Linux提供了一个专门的变量$ ?来保存上一个已执行命令的退出状态码。对于需要进行检查的命令,必须在其运行完毕后立刻查看或使用美元吗?变量。它的值会变成有壳所执行的最后一条命令的退出状态码。
一个成功结束的命令的退出状态码是0. linux错误退出状态码没有什么标准可循,但有一些可用的参考:
状态码 描述 0 命令成功结束 1 一般性未知错误 2 不适合的壳指令 126 命令不可执行 127 没找到命令 128 无效的退出参数 128 + x 与Linux信号x相关的严重错误 130 通过Ctrl + C终止的命令 255 正常范围之外的退出状态码举例说明:
-
<李>无效的命令会返回一个退出状态码127。李>
<李>退出状态码126,表明用户没有执行命令的正确权限。李>
<李>给命令提供了无效参数,会产生一般性的退出状态码1,表明在命令中发生了未知错误。李>
退出命令
默认情况下,壳牌脚本会以脚本中的最后一个命令的退出状态码退出。
使用退出命令可以改变这种行为,允许你在脚本结束时指定一个退出状态码。
退出状态码是一个0 ~ 255的整数,参数太大,会被系统取模。
IFS字段分隔符
环境变量IFS,叫做<强>内部字段分隔符强>(内部字段分隔符)如果环境变量定义了bash shell用作字段分隔符的一些列字符。默认情况下是空格,制表符,换行符。可以更改这个环境变量。
因为都是一些特殊字符,直接输出是看不到的:
<代码类=" language-bash ">美元回声“IFS美元” 美元回声“IFS美元”| od - b 012 040 011 012 0000000 0000004 $ 代码>
这里转成了八进制!”040年“是空格,“011“是制表符,“012”是换行符。最后一个012是因为回波默认是会换行的。
还可以试一下- c选项,这样会打印出t和\ \ n但是空格还是空格,就不明显了。
<强> od命令强>
od命令系统默认的显示方式是八进制,名称源于八进制转储。另外还有一个hexdump命令,以十六进制输出。功能上应该有一些差别,用起来差不多,这里的情况把od命令替换为hexdump命令的效果应该是一样的。
hexdump有个- c(大写)选项是od没有的,这里没什么效果,用来查看文件的时候效果好。
<强>只识别换行符:强>
<代码类=" language-bash "> IFS=$ ' \ n ' 代码>
临时更改IFS
一个可参考的安全实践是在改变IFS之前保存原来的值,之后再恢复它:
<代码类=" language-bash "> IFS_old=$ IFS IFS=$ ' \ n ' & lt;使用新的IFS值比; IFS=$ IFS_old 代码>
这就保证了在脚本的后续操作中使用的是IFS的默认值。建议在任何时候都这么做。
指定多个IFS字符
要指定多个IFS字符,只要将它们在赋值行串起来就行了:
<代码类=" language-bash "> IFS=$“\ n”:,“代码>
这里将换行符,冒号,分号,双引号作为字段分隔符。
三通将输出同时发送到屏幕和文件
三通命令相当于管道的一个T型接头。它将从STDIN过来的数据同时发往两处,一处是STDOUT,另一处是三通命令行所指定的文件名。
默认情况下,每次都会覆盖文件:
<代码类=" language-bash "> $ |三通test1日期 12月6日星期五16:32:59中科2019 猫test1美元 12月6日星期五16:32:59中科2019 $ |三通test1日期 12月6日星期五16:33:10中科2019 猫test1美元 12月6日星期五16:33:10中科2019 $ 代码>
如果想追加数据,需要用——选项:
<代码类=" language-bash ">猫test1美元 12月6日星期五16:33:10中科2019 $ |三通——test1日期 12月6日星期五16:34:00中科2019 猫test1美元 12月6日星期五16:33:10中科2019 12月6日星期五16:34:00中科2019 $壳牌的退出状态码,IFS环境变量,三通命令,猫在文件& lt; & lt;EOF的用法