In Shell script, $0, $?, $!, $$, $*, $#$@ And the meaning of linux command execution return value

In Shell script, $0, $?, $!, $$, $*, $#$@ And the meaning of the return value of linux command execution

(1) In shell script, $0, $?, $!, $$, $*, $#$@ And so on

1.1 brief description


ps: you can understand it by trying more in Linux environment
The PID (ProcessID) of the Shell itself, that is, the current time the script is running Process ID No.)
PID of the last background Process running in the Shell (PID of the last Process running in the background) Process ID No.)
The end code (return value) of the last running command is the return value of the last instruction executed (showing the exit status of the last command. 0 indicates no error, and any other value indicates an error)
Displays the current options used by the shell, with the same function as the set command
List of all parameters. If "$*" is enclosed by "," and all parameters are output in the form of "$1 $2... $n", this option can have more than 9 parameters.
List of all parameters. If "$@" is enclosed by ",", output all parameters in the form of "$1" $2 "..." $n ".
$@ is similar to $*, but can be used as an array
Number of parameters added to Shell
The file name of the Shell itself
The value of each parameter added to the Shell$ 1 is the first parameter, $2 is the second parameter.
1.2 script examples
Let's write a simple script and explain the meaning of each variable after execution
# touch variable
# vi variable
The script is as follows:
echo "number:$#"
echo "scname:$0"
echo "first :$1"
echo "second:$2"
echo "argume:$@"
Save exit
Grant script execution permission
# chmod +x variable
Execute script
# ./variable aa bb
first: aa
argume:aa bb
Result analysis
By displaying the results, you can see:
$# is the number of parameters passed to the script
$0 is the name of the script itself
$1 is the first parameter passed to the shell script
$2 is the second parameter passed to the shell script
$@ is a list of all parameters passed to the script
(2) linux command execution return value description
Under Linux, whether you start a desktop program or run a command under the console, all programs will return a numerical value at the end. This value is called return value, or Error Number.
2.1. Under the console, there is a special environment variable $?, Save the return value of the previous program. We can try:
$ ls *.png
Diagram1.png  eqn.png         peazip.png
eqn4.png      Mandelbrot.png  x2.png
$ echo $?
First execute a command casually, such as some files like ls above, and then use echo $?, Print $? Value of ~
We find that the return value is 0. What does that mean?
As long as the return value is 0, it means that the program execution is successful ~
That is, if $? If the value of the variable is not 0, it indicates that an error occurred in the execution of the previous command.
2.2. We can try to ls a file that does not exist:
$ ls linuxgem
ls: cannot access linuxgem: there is no file or directory
$ echo $?
In this way, for some commands that print out a pile of unfamiliar English information, it is convenient to see whether it is successfully executed.
However, echo $? It's too tired. It doesn't matter. Can you put $? Put it in the prompt:
2.3. Put the return value of whether the last command was executed successfully in the prompt: export PS1="[$?]${PS1}"
tom@localhost ~ $ export PS1="[\$?]${PS1}"
[0]tom@localhost ~ $


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


reference resources:

Tags: shell

Posted by frenchy373 on Mon, 23 May 2022 23:56:09 +0300