Shell脚本中$0、$?、$!、$$、$*、$#、$@等的意义以及linux命令执行返回值代表意义
  

牵网线的 7561人觉得有帮助

{{ttag.title}}
本帖最后由 牵网线的 于 2022-4-3 23:22 编辑

(2) linux命令执行返回值说明

在 Linux 下,不管你是启动一个桌面程序也好,还是在控制台下运行命令,所有的程序在结束时,都会返回一个数字值,这个值叫做返回值,或者称为错误号 ( Error Number )。

2.1、在控制台下,有一个特殊的环境变量 $?,保存着前一个程序的返回值,我们可以试试:
$ ls *.png
Diagram1.png  eqn.png         peazip.png
eqn4.png      Mandelbrot.png  x2.png
$ echo $?
0
先随便执行个命令,比如像上面的 ls 某些文件,然后通过 echo $?,打印 $? 的值~
我们发现返回值是 0,这是什么意思呢?
只要返回值是 0,就代表程序执行成功了~
也就是说,如果 $? 变量的值不是 0 的话,就表示上一个命令在执行的过程中出错了。

2.2、我们可以试着 ls 一个不存在的文件:
$ ls linuxgem
ls: 无法访问 linuxgem: 没有那个文件或目录
$ echo $?
2
这样,对于某些打印出一堆不熟悉的英文信息的命令,可以方便的看出它是否成功执行结束。
不过,每次都 echo $? 一下太累了,没关系,你可以把 $? 放在提示符里去:

2.3、将上次命令执行是否成功的返回值放到提示符里面去:export PS1="[\$?]${PS1}"

tom@localhost ~ $ export PS1="[\$?]${PS1}"[0]tom@localhost ~ $
export PS1="[\$?]${PS1}"  这个命令把 $? 的值放在的提示符的最前面,这样每次执行完命令,这个值都会自动更新,这下就一目了然了~

2.3、用perror查看错误提示

那么如果返回的值不是 0,我们要怎么知道是那里出错了呢? 大多数的程序出错都会给出提示,如果没有提示的话,可以用 perror 这个程序来查看错误的信息,比如返回值是 2,我们可以运行:
$ perror 2
OS error code   2:  No such file or directory
这样就清楚了,原来是文件不存在~

2.4、给出错误代码及其具体原因对照表:
  1. "OS error code   1:  Operation not permitted"
  2. "OS error code   2:  No such file or directory"
  3. "OS error code   3:  No such process"
  4. "OS error code   4:  Interrupted system call"
  5. "OS error code   5:  Input/output error"
  6. "OS error code   6:  No such device or address"
  7. "OS error code   7:  Argument list too long"
  8. "OS error code   8:  Exec format error"
  9. "OS error code   9:  Bad file descriptor"
  10. "OS error code  10:  No child processes"
  11. "OS error code  11:  Resource temporarily unavailable"
  12. "OS error code  12:  Cannot allocate memory"
  13. "OS error code  13:  Permission denied"
  14. "OS error code  14:  Bad address"
  15. "OS error code  15:  Block device required"
  16. "OS error code  16:  Device or resource busy"
  17. "OS error code  17:  File exists"
  18. "OS error code  18:  Invalid cross-device link"
  19. "OS error code  19:  No such device"
  20. "OS error code  20:  Not a directory"
  21. "OS error code  21:  Is a directory"
  22. "OS error code  22:  Invalid argument"
  23. "OS error code  23:  Too many open files in system"
  24. "OS error code  24:  Too many open files"
  25. "OS error code  25:  Inappropriate ioctl for device"
  26. "OS error code  26:  Text file busy"
  27. "OS error code  27:  File too large"
  28. "OS error code  28:  No space left on device"
  29. "OS error code  29:  Illegal seek"
  30. "OS error code  30:  Read-only file system"
  31. "OS error code  31:  Too many links"
  32. "OS error code  32:  Broken pipe"
  33. "OS error code  33:  Numerical argument out of domain"
  34. "OS error code  34:  Numerical result out of range"
  35. "OS error code  35:  Resource deadlock avoided"
  36. "OS error code  36:  File name too long"
  37. "OS error code  37:  No locks available"
  38. "OS error code  38:  Function not implemented"
  39. "OS error code  39:  Directory not empty"
  40. "OS error code  40:  Too many levels of symbolic links"
  41. "OS error code  42:  No message of desired type"
  42. "OS error code  43:  Identifier removed"
  43. "OS error code  44:  Channel number out of range"
  44. "OS error code  45:  Level 2 not synchronized"
  45. "OS error code  46:  Level 3 halted"
  46. "OS error code  47:  Level 3 reset"
  47. "OS error code  48:  Link number out of range"
  48. "OS error code  49:  Protocol driver not attached"
  49. "OS error code  50:  No CSI structure available"
  50. "OS error code  51:  Level 2 halted"
  51. "OS error code  52:  Invalid exchange"
  52. "OS error code  53:  Invalid request descriptor"
  53. "OS error code  54:  Exchange full"
  54. "OS error code  55:  No anode"
  55. "OS error code  56:  Invalid request code"
  56. "OS error code  57:  Invalid slot"
  57. "OS error code  59:  Bad font file format"
  58. "OS error code  60:  Device not a stream"
  59. "OS error code  61:  No data available"
  60. "OS error code  62:  Timer expired"
  61. "OS error code  63:  Out of streams resources"
  62. "OS error code  64:  Machine is not on the network"
  63. "OS error code  65:  Package not installed"
  64. "OS error code  66:  Object is remote"
  65. "OS error code  67:  Link has been severed"
  66. "OS error code  68:  Advertise error"
  67. "OS error code  69:  Srmount error"
  68. "OS error code  70:  Communication error on send"
  69. "OS error code  71:  Protocol error"
  70. "OS error code  72:  Multihop attempted"
  71. "OS error code  73:  RFS specific error"
  72. "OS error code  74:  Bad message"
  73. "OS error code  75:  Value too large for defined data type"
  74. "OS error code  76:  Name not unique on network"
  75. "OS error code  77:  File descriptor in bad state"
  76. "OS error code  78:  Remote address changed"
  77. "OS error code  79:  Can not access a needed shared library"
  78. "OS error code  80:  Accessing a corrupted shared library"
  79. "OS error code  81:  .lib section in a.out corrupted"
  80. "OS error code  82:  Attempting to link in too many shared libraries"
  81. "OS error code  83:  Cannot exec a shared library directly"
  82. "OS error code  84:  Invalid or incomplete multibyte or wide character"
  83. "OS error code  85:  Interrupted system call should be restarted"
  84. "OS error code  86:  Streams pipe error"
  85. "OS error code  87:  Too many users"
  86. "OS error code  88:  Socket operation on non-socket"
  87. "OS error code  89:  Destination address required"
  88. "OS error code  90:  Message too long"
  89. "OS error code  91:  Protocol wrong type for socket"
  90. "OS error code  92:  Protocol not available"
  91. "OS error code  93:  Protocol not supported"
  92. "OS error code  94:  Socket type not supported"
  93. "OS error code  95:  Operation not supported"
  94. "OS error code  96:  Protocol family not supported"
  95. "OS error code  97:  Address family not supported by protocol"
  96. "OS error code  98:  Address already in use"
  97. "OS error code  99:  Cannot assign requested address"
  98. "OS error code 100:  Network is down"
  99. "OS error code 101:  Network is unreachable"
  100. "OS error code 102:  Network dropped connection on reset"
  101. "OS error code 103:  Software caused connection abort"
  102. "OS error code 104:  Connection reset by peer"
  103. "OS error code 105:  No buffer space available"
  104. "OS error code 106:  Transport endpoint is already connected"
  105. "OS error code 107:  Transport endpoint is not connected"
  106. "OS error code 108:  Cannot send after transport endpoint shutdown"
  107. "OS error code 109:  Too many references: cannot splice"
  108. "OS error code 110:  Connection timed out"
  109. "OS error code 111:  Connection refused"
  110. "OS error code 112:  Host is down"
  111. "OS error code 113:  No route to host"
  112. "OS error code 114:  Operation already in progress"
  113. "OS error code 115:  Operation now in progress"
  114. "OS error code 116:  Stale NFS file handle"
  115. "OS error code 117:  Structure needs cleaning"
  116. "OS error code 118:  Not a XENIX named type file"
  117. "OS error code 119:  No XENIX semaphores available"
  118. "OS error code 120:  Is a named type file"
  119. "OS error code 121:  Remote I/O error"
  120. "OS error code 122:  Disk quota exceeded"
  121. "OS error code 123:  No medium found"
  122. "OS error code 124:  Wrong medium type"
  123. "OS error code 125:  Operation canceled"
  124. "OS error code 126:  Required key not available"
  125. "OS error code 127:  Key has expired"
  126. "OS error code 128:  Key has been revoked"
  127. "OS error code 129:  Key was rejected by service"
  128. "OS error code 130:  Owner died"
  129. "OS error code 131:  State not recoverable"
  130. "MySQL error code 132: Old database file"
  131. "MySQL error code 133: No record read before update"
  132. "MySQL error code 134: Record was already deleted (or record file crashed)"
  133. "MySQL error code 135: No more room in record file"
  134. "MySQL error code 136: No more room in index file"
  135. "MySQL error code 137: No more records (read after end of file)"
  136. "MySQL error code 138: Unsupported extension used for table"
  137. "MySQL error code 139: Too big row"
  138. "MySQL error code 140: Wrong create options"
  139. "MySQL error code 141: Duplicate unique key or constraint on write or update"
  140. "MySQL error code 142: Unknown character set used"
  141. "MySQL error code 143: Conflicting table definitions in sub-tables of MERGE table"
  142. "MySQL error code 144: Table is crashed and last repair failed"
  143. "MySQL error code 145: Table was marked as crashed and should be repaired"
  144. "MySQL error code 146: Lock timed out; Retry transaction"
  145. "MySQL error code 147: Lock table is full;  Restart program with a larger locktable"
  146. "MySQL error code 148: Updates are not allowed under a read only transactions"
  147. "MySQL error code 149: Lock deadlock; Retry transaction"
  148. "MySQL error code 150: Foreign key constraint is incorrectly formed"
  149. "MySQL error code 151: Cannot add a child row"
  150. "MySQL error code 152: Cannot delete a parent row"
复制代码

打赏鼓励作者,期待更多好文!

打赏
2人已打赏

点线网 发表于 2022-4-3 11:10
  
感谢分享,有助于工作和学习!
一个无趣的人 发表于 2022-6-6 10:52
  
我在社区摸爬滚打这么多年,所谓阅人无数,就算没有见过猪走路,也总明白猪肉是啥味道的。一看到楼主的气势,我就觉得楼主同在社区里灌水的那帮小混子有着本质的差别,你一定就是传说中的最强技术牛。
好懒 发表于 2023-5-17 11:03
  
楼主的文章图文并茂,清晰易懂,看完这波操作可以轻松上手了,如遇到问题再向楼主请教~
发表新帖
热门标签
全部标签>
每日一问
技术盲盒
干货满满
技术笔记
新版本体验
功能体验
产品连连看
标准化排查
2023技术争霸赛专题
技术晨报
GIF动图学习
运维工具
用户认证
秒懂零信任
技术咨询
信服课堂视频
解决方案
VPN 对接
专家分享
社区帮助指南
自助服务平台操作指引
畅聊IT
答题自测
专家问答
技术圆桌
在线直播
MVP
网络基础知识
安装部署配置
升级
安全攻防
上网策略
测试报告
日志审计
问题分析处理
流量管理
每日一记
云计算知识
原创分享
sangfor周刊
项目案例
SANGFOR资讯
技术顾问
信服故事
SDP百科
功能咨询
终端接入
授权
设备维护
资源访问
地址转换
虚拟机
存储
迁移
加速技术
排障笔记本
产品预警公告
玩转零信任
信服圈儿
S豆商城资讯
技术争霸赛
「智能机器人」
追光者计划
深信服技术支持平台
答题榜单公布
纪元平台
通用技术
卧龙计划
华北区拉练
天逸直播
以战代练
山东区技术晨报
文档捉虫活动
齐鲁TV
华北区交付直播
每周精选

本版版主

12
185
6

发帖

粉丝

关注

本版达人

LoveTec...

本周分享达人

新手24116...

本周提问达人