shell特殊变量

    对于shell编程,其实特殊变量常用的有几个,重温下,算是一个小结吧。

    1、位置变量:

$0  获取当前执行的shell脚本的文件名,包括路径。

$n  获取当前执行的shell脚本的第n个参数值,n=1..9,当n为0时,表示脚本的文件名,如果n大于9,用大括号括下来${10}

$*  获取当前shell的所有参数,将所有的命令行参数视为单个字符串,相当于”$1$2$3” ...注意与$#的区别

$#  获取当前shell命令行中参数的总个数

[email protected]  这个程序的所有参数”$1” “$2” “$3” “...”,这是将参数传递给其他程序的最佳方式,因为他会保留所有内嵌在每个参数里任何空白。

提示:$*和[email protected]的区别?

    2、进程状态变量

$$  获取当前shell的进程号(PID)

$!  执行上一个指令的PID

$?  获取执行上一个指令的返回值(0为成功,非0为失败)#→这个变量很常用。

$_  在此之前执行的命令或脚本的最后一个参数

注:以上有底色标记内容为生产场景中常用知识。

$ cat specVar.sh 
#!/bin/bash
#Filename: specVar.sh
#Email: watchsky126(at)hotmail.com
#Version: v0.1
echo ‘$0  获取当前执行的shell脚本的文件名‘$0
echo ‘$n  获取当前执行的shell脚本的第n个参数值,n=1..9:‘‘$1‘=$1 ‘$2‘=$2 ‘$3‘=$3
echo‘$*  获取当前shell的所有参数"$1 $2 $3 ..."注意与$#的区别:‘$*
echo ‘$#  获取当前shell命令行中参数的总个数:‘$#
echo‘$$  获取当前shell的进程号(PID):‘$$
sleep2 &
echo‘$!  执行上一个指令的PID:‘ $!
echo‘$?  获取执行的上一个指令的返回值:‘ $?
echo‘[email protected]  这个程序的所有参数 "$1" "$2""$3" "...":‘ [email protected]
echo‘$_  在此之前执行的命令或脚本的最后一个参数:‘$_
$ sh specVar.sh aa bb cc
$0 获取当前执行的shell脚本的文件名specVar.sh
$n 获取当前执行的shell脚本的第n个参数值,n=1..9:$1=aa $2=bb $3=cc
$*  获取当前shell的所有参数"$1 $2 $3 ..."注意与$#的区别:aa bb cc
$# 获取当前shell命令行中参数的总个数:3
$$  获取当前shell的进程号(PID):23699
$!  执行上一个指令的PID: 23700
$? 获取执行的上一个指令的返回值:0
[email protected]  这个程序的所有参数 "$1" "$2""$3" "...": aa bb cc
$_  在此之前执行的命令或脚本的最后一个参数:cc

Linux命令的返回值错误对照表

"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"
时间: 2024-12-19 08:36:22

shell特殊变量的相关文章

shell编程变量及变量类型

编程语言:包括机器语言.汇编语言.{高级语言[静态语言(编译型语言,一般为强类型变量,需要发布为可执行程序,C.C++.Java,C#)和动态语言(解释型语言,一般为弱类型语言,不需要发布为可执行程序,是一边执行一边解释,Asp,asp.net,php,shell,python.perl)]} 面向对象:解决对象之间的动作,主要适合开发大型程序java,python,c++,perl 面向过程:主要解决过程,主要适合开发小型程序shell,c 变量:是内存空间,是命名的内存空间,存储数据的存储格

shell中变量的使用(2)

shell中变量的几点知识: 变量: 1.在默认情况下,所有的变量都被看做字符串来存储的 2.变量区分大小写 3.在变量名前加$来访问内容 4.不需要声明 5.双引号中允许$扩展(用变量的值替换),单引号不行. 示例: s=hello         #(注意等号两边不能有空格) echo $s 环境变量: shell脚本开始执行时,一些变量会根据环境设置中的值进行初始化,这些变量就是环境变量.习惯大写字母. $HOME 当前用户的家目录 $PATH  以冒号分割的用来搜索命令的目录列表 $0 

笔记-Shell特殊变量

位置变量: $0: 获取当前执行shell的文件名称,如果执行脚本带路径那么就包括脚本路径 $n:  获取当前执行的shell脚本的第ng参数值,n=1..9,当n为0时表示脚本的文件名,如果n大于9,大括号括起来${10}. [[email protected] ~]# vim q.sh                     echo $1 $2 $3 $4 $5 $6 $7 $8 $9 ${10} ${11} ${12} ${13} ${14} ${15} 输出的结果 [[email pr

linux学习之shell脚本 ------- 变量

[本文是自己学习所做笔记,欢迎转载,但请注明出处:http://blog.csdn.net/jesson20121020] 今天来看一下Shell中的一些变量. 变量类型: Shell中有以下几种变量: 1) 本地变量 2) 环境变量 3) 位置变量 4) 标准变量 5) 特殊变量 1) 本地变量 本地变量在用户现在的Shell生命周期的脚本中使用. 用法: variable-name=value set: 可以显示本地所有的变量 注意,本地变量如果加上readonly,则该本地变量不能被修改,

shell之变量

变量赋值 变量的赋值有五种:使用read命令,直接赋值,使用命令行参数,使用命令行的输出结果,从文件读取.1 先说一下从read命令吧:(主要是在需要交互时使用)Read命令是系统内置命令,语法格式为:read 变量1 变量2当Shell脚本执行到read命令时,将暂停脚本的执行并等待键盘的输入,当用户输入完毕并且敲下回车之后,将完成赋值操作,脚本继续执行.Read指令的规则:多个数据或变量之间用空格隔开若变量个数与数据个数相等时,对应取值若变量个数大于数据个数时,没有输入数据的变量取空值若变量

shell自定义变量

一.Shell定义变量需要遵循的规则 Shell编程中,使用变量无需事先声明,同时变量名的命名须遵循如下规则: 首个字符必须为字母(a-z,A-Z) 中间不能有空格,可以使用下划线(_) 不能使用标点符号 不能使用bash里的关键字(可用help命令查看保留关键字) 二.shell变量赋值 需要给变量赋值时,可以这么写:   变量名=值 三.shell变量的引用 要取用一个变量的值,只需在变量名前面加一个$ ( 注意: 给变量赋值的时候,不能在"="两边留空格 ).例如:#!/bin/

shell 将变量当命令执行问题【多条命令同时执行问题】

shell将变量当命令执行问题[多条命令同时执行问题] 今天写了个shell脚本,脚本中需要将变量当做shell命令运行,通常的方法有多种,比如: `${var}` 将变量内容当shell命令行执行 $(${var}) 将变量内容当shell命令执行 ${var}将变量内容当shell命令执行[不推荐此种方法] 但是这3种方法只能运行单条命令,当命令是下面类型时就会有问题: VAR1='cd /home ;echo "hello";echo "good"' VAR2

Bash shell和变量详解

本文的结构:bash shell简介-->变量和变量操作.数组-->bash的环境配置文件分析 什么是shell: 操作系统是一组软件,用于控制整个硬件和管理系统活动,若直接使用操作系统,操作不当会导致系统崩溃,用户不可随意操作,所以通过"shell"将我们输入的命令与内核通信,让内核准确的控制硬件工作 shell是在操作系统上开发的应用程序,是用户可操作的最外层,也就是"shell"壳 什么是bash Bourne Again SHell,Bourne

[shell基础]——变量

变量的赋值 #定义变量,注意等号两边没有任何空格 variable=#定义环境变量export variable= #双引号:可含空格.可转义特殊字符 variable=" " #$() 或 反引号:将命令结果赋值给变量 variable=$( ) variable=` ` #将变量值赋值给变量 gg=$aa$bb 变量的取值 #取值$variable #标准写法,建议使用此方法 ${variable} #示例: #DAY=sunday #echo $DAY sunday # echo

Shell函数,Shell数组,变量替换

定义函数 function 函数名 { 函数的功能体 ...... } 函数名(){ 函数的功能体 ...... } 如何调用函数 函数名 函数的使用规则? 1)先定义后调用,可以只定义不调用 2)定义放上面,调用放下面 3)函数名区分大小写 4)函数名相同,后定义的生效 5)函数名不准使用特殊符号和关健字 6)在函数体内定义的变量叫局部变量,只能在当前函数内使用 7)在函数体外定义的变量叫全局变量 8)在第二个函数里敲上第一个函数的函数名,这样可以调用第一个函数的变量 例 #!/bin/bas