一、概述shell中的字符有两种:普通字符和元字符。1、普通字符在Shell中除了字面意义外没有特殊意义,即普通的明文;2、元字符是Shell的保留字符,在Shell中有特殊的含义。今天主要介绍字符$在shell中的各种用法。2、转义符$字符$在linuxshell脚本中经常使用。以下是$的一些常见用法。Parameter$2传递给shell脚本的第二个参数$@传递给脚本的所有参数的列表$*以单个字符串显示传递给脚本的所有参数,不像位置变量,参数可以超过9个$$Script的ID号当前运行的进程$?显示最后一条命令的退出状态,0表示没有错误,其他表示有错误示例1创建脚本peng.sh如下:#/bin/bashtotal=$[$1*$2+$3]echo"$1*$2+$3=$total"运行如下:./peng.sh456结果如下:例2向shell脚本输入字符串时,注意使用空格作为分隔符。如果字符串本身有空格,那么使用双引号或者单引号,比如#/bin/bashecho"$1isprettynice!"运行如下:./peng.sh一口linux结果如下:例3#!/bin/shecho"参数个数:$#"echo"脚本名:$0"echo"参数1:$1"echo"parameter2:$2"echo"所有参数列表:$@"echo"pid:$$"if[$1=100]thenecho"commandexitstatus:$?"exit0#参数正确,退出状态为0elseecho"commandexitstatus:$?"exit1#参数错误,退出状态为1fi执行结果:例4用for循环来遍历参数示例:#!/bin/bashnumber=65#定义一个退出值index=1#定义一个计数器if[-z"$1"];then#判断用户输入的参数,如果没有输入参数,则返回脚本的用法和退出,退出值65echo"Usage:$0+parameter"exit$numberfiecho"listingargswith\$*:"#在屏幕上输入,遍历$*forargin$*doecho中的参数"arg:$index=$arg"letindex+=1doneechoindex=1#设置计数器重置为1echo"listingargswith\"\$@\":"#遍历"$@"中的参数forargin"$@"doecho"arg:$index=$arg"letindex+=1doneExample5Tip1:InandExampleoftraversingparametersin*:#!/bin/bashnumber=11if[$#-eq0];thenecho"Usage:$0+parameters"exit$numberfiforiin$*#遍历参数$*中,此时每个参数是独立的,会遍历$#次doecho$idoneechoforiin"$*"#遍历"$*"中的参数,此时"$*"扩展为包含所有位置参数的单个字符串,只遍历doecho$idoneonce3.linux命令执行的返回值**$?**表示在linux下,无论是启动桌面程序还是在控制台下运行命令,所有程序最后都会返回一个数值,这个value称为返回值,或错误号(ErrorNumber)1、在控制台下,有一个特殊的环境变量$?,保存的是前面程序的返回值。我们可以试试:先执行一个随机命令,比如上面的lssomefiles,然后传echo?,打印出的值?~我们发现返回值为0,这是什么意思呢?只要返回值为0,就说明程序执行成功~也就是说,如果$?变量不为0,则表示之前的命令执行过程中发生了错误。2、我们可以尝试ls一个不存在的文件:这样对于一些打印出一堆陌生英文信息的命令,我们很容易看出是否执行成功。然而,每次回声?太累了,没事,可以放吗?在提示符中:3.将上次命令执行成功与否的返回值放在提示符中:exportPS1="[\$?]${PS1}"root@ubuntu:/home/peng/zhh#exportPS1="[\$?]${PS1}"[0]root@ubuntu:/home/peng/zhh#lsexportPS1="[\$?]${PS1}"此命令将$?在提示符最前面,这样每次执行命令时,值都会自动更新,一目了然~4.使用perror查看错误信息,那么如果返回值是不是0,我们怎么知道哪里有错误呢?如果有错误,大多数程序都会给出提示。如果没有提示,可以使用perror程序查看错误信息。比如返回值为2,我们可以运行下面的命令:$perror2OSerrorcode2:Nosuchfileordirectory这样可以明确文件不存在~这个命令需要用apt-getinstallperror5安装。给出错误码及其具体原因对照表:"OSerrorcode1:Operationnotpermitted""OSerrorcode2:Nosuchfileordirectory""OSerrorcode3:Nosuchprocess""OSerrorcode4:Interruptedsystemcall""OSerrorcode5:Input/outputerror""OSerrorcode6:Nosuchdeviceoraddress""OSerrorcode7:Argumentlisttoolong""OSerrorcode8:Execformaterror""OSerrorcode9:Badfiledescriptor""OSerrorcode10:Nochildprocessestempcode"1Resource:Resourceorarilyunavailable""OSerrorcode12:Cannotallocatememory""OSerrorcode13:Permissiondenied""OSerrorcode14:Badaddress""OSerrorcode15:Blockdevicerequired""OSerrorcode16:Deviceorresourcebusy""OSerrorcode17:Fileexists""OSerrorcode18:Invalidcross-devicelink""OSerrorcode19:Nosuchdevice""OSerrorcode20:Notadirectory""OSerrorcode21:Isadirectory""OSerrorcode22:Invalidargument""OSerrorcode23:Toomanyopenfilesinsystem""OSerrorcode24:Toomanyopenfiles""OSerrorcode25:Inappropriateioctlfordevice""OSerrorcode26:Textfilebusy""OSerrorcode27:Filetoolarge""OSerrorcode28:Nospaceleftondevice""OSerrorcode29:Illegalseek:"OSErrorcode30“”OSerrorcode31:Toomanylinks“”OSerrorcode32:Brokenpipe””OSerrorcode33:Numericalargumentoutofdomain”"OSerrorcode34:Numericalresultoutofrange""OSerrorcode35:Resourcedeadlockavoided""OSerrorcode36:Filenametoolong""OSerrorcode37:Nolocksavailable""OSerrorcode38:Functionnotimplemented""OSerrorcode39:Directorynotempty""OSerrorcode40:Toomanylevelsofsymboliclinks""OSerrorcode42:Nomessageofdesiredtype""OSerrorcode43:Identifierremoved""OSerrorcode44:Channelnumberoutofrange""OSerrorcode45:Level2notsynchronized""OSerrorcode46:Level3halted""OSerrorcode47:Level3reset""OSerrorcode48:Linknumberoutofrange""OSerrorcode49:Protocoldrivernotattached""OSerrorcode50:NoCSIstructureavailable""OSerrorcode51:Level2halted""OSerrorcode52:Invalidexchange""OSerrorcode53:Invalidreerrorquestdescriptor4"“”OSerrorcode55:Noanode“”OSerrorcode56:Invalidrequestcode""OSerrorcode57:Invalidslot""OSerrorcode59:Badfontfileformat""OSerrorcode60:Devicenotastream""OSerrorcode61:Nodataavailable""OSerrorcode62:Timereexpired""OSerrorcode63:Outofstreamsresources""OSerrorcode64:Machineisnotonthenetwork""OSerrorcode65:Packagenotinstalled""OSerrorcode66":ObjectisremoteLinkhasbeensevered""OSerrorcode68:Advertiseerror""OSerrorcode69:Srmountererror""OSerrorcode70:Communicationerroronsend""OSerrorcode71:Protocolerror""OSerrorcode72:Multihopattempted""OSerrorcode73:RFSspecificerror""OSerrorcode74:Badmessage""OSerrorcode75:Valuetoolargefordefineddatatype""OSerrorcode76:Name:"notunun文件描述符处于错误状态“”OSerrorcode78:远程地址已更改“”OSerrorcode79:Cannotaccessaneededsharedlibrary""OSerrorcode80:Accessingacorruptedsharedlibrary""OSerrorcode81:.libsectionina.outcorrupted""OSerrorcode82:Attemptingtolinkintoomanysharedlibraries""OSerrorcode83:Cannotexecasharedlibrarydirectly""OSerrorcode84:Invalidorincompletemultibyteorwidecharacter""OSerrorcode85:Interruptedsystemcallshouldberestarted""OSerrorcode86:Streamspipeerror""OSerrorcode87:Toomanyusers""OSerrorcode88:Socketoperationonnon-套接字“”OSerrorcode89:需要目标地址“”OSerrorcode90:Messagetoolong“”OSerrorcode91:Protocolwrongtypeforsocket“”OSerrorcode92:Protocolnotavailable“”OSerrorcode93:Protocolnotsupported“”OSerrorcode94:Sockettypenotsupported“”OSerrorcode95:Operationnotsupported“”OSerrorcode96:Protocolfamilynotsupported“”OSerrorcode97:Addressfamilynotsupportedbyprotocol""OSerrorcode98:Addressalreadyinuse""OSerrorcode99:Cannotassignrequestedaddress""OSerrorcode100:Networkisdown""OSerrorcode101:Networkisunreachable""OSerrorcode102:Networkdroppedconnectiononreset""OSerrorcode103:Softwarecausedconnectionabort""OSerrorcode104:Connectionresetbypeer""OSerrorcode105:Nobufferspaceavailable""OSerrorcode106:Transportendpointisalreadyconnected""OSerrorcode107:Transportendpointisnotconnected""OSerrorcode108:Cannotsendaftertransportendpointshutdown""OSerrorcode109:Toomanyreferences:cannotsplice""OSerrorcode110:Connectiontimedout""OSerrorcode111:Connectionrefused""OSerrorcode112:Hostisdown""OSerrorcode113:Noroutetohost""OSerrorcode114:Operationalreadyinprogress""OSerrorcode115:Operationnowinprogress""OSerrorcode116:StaleNFSfilehandle""OSerrorcode117:Structureneedscleaning""OSerrorcode118:NotaXENIXnamedtypefile""OSerrorcode123:NoXENIXsemaphoresavailable""OSerrorcode120:Isanamedtypefile""OSerrorcode121:RemoteI/Oerror""OSerrorcode122:Diskquotaexceeded""OSerrorcode123:Nomediumfound""OSerrorcode124:"OSerrorcode124"OSerrorcode126:Requiredkeynotavailable""OSerrorcode127:Keyhasexpired""OSerrorcode128:Keyhasbeenrevoked""OSerrorcode129:Keywasrejectedbyservice""OSerrorcode130:Ownerdied""OSerrorcode131:Statenotrecoverable""MySQLerrorcode132:Olddatabasefile""MySQLerrorcode133:Norecordreadbeforeupdate""MySQLerrorcode134:Recordwasalreadydeleted(orrecordfilecrashed)""MySQLerrorcode135:Nomorroominrecordfile""MySQLerrorcode136:Nomorroominindexfile""MySQLerrorcode137:Nomorerecords(readafterendoffile)""MySQLerrorcode138:Unsupportedextensionusedfortable""MySQLerrorcode139:Toobigrow""MySQLerrorcode140:Wrongcreateoptions""MySQLerrorcode141:Duplicateuniquekeyorconstraintonwriteorupdate""MySQLerrorcode142:Unknowncharactersetused""MySQLerrorcode143:Conflictingtabledefinitionsinsub-tablesofMERGEtable""MySQLerrorcode144:Tableiscrashedandlastrepairfailed""MySQLerrorcode145:Tablewasmarkedascrashedandshouldberepaired“”MySQLerrorcode146:Locktimedout;Retrytransaction“”MySQLerrorcode147:Locktableisfull;Restartprogramwithalargerlocktable””MySQLerrorcode148:Updatesarenotallowedunderareadonlytransactions””MySQLerrorcode149:Lockdeadlock;Retrytransaction””MySQLerrorcode150:Foreignkeyconstraintisincorrectlyformederror””MySQLerrorcode151:MySQLchildrow”ode152:Cannotdeleteaparentrow》本文转载自微信公众号《一口Linux》。
