变量通常看起来像$var,但它们也有$1、$*、$?的形式。和$$。让我们看看所有这些$值能告诉你什么。Linux系统中存储了很多重要的值,我们称之为“变量”,但实际上有几种类型的变量,以及一些有趣的命令来帮助您使用它们。在上一篇文章中,我们查看了环境变量及其定义位置。在本文中,我们将了解命令行和脚本中使用的变量。用户变量虽然在命令行上设置变量非常容易,但也有一些有趣的技巧。要设置变量,您只需执行以下操作:$myvar=11$myvar2="eleven"要显示值,只需执行以下操作:$echo$myvar11$echo$myvar2eleven您也可以使用这些变量。例如,要增加一个数字变量,使用以下任何命令:$myvar=$((myvar+1))$echo$myvar12$((myvar=myvar+1))$echo$myvar13$((myvar+=1))$echo$myvar14$((myvar++))$echo$myvar15$let"myvar=myvar+1"$echo$myvar16$let"myvar+=1"$echo$myvar17$let"myvar++"$echo$myvar18使用which对于某些人,您可以增加变量的值。例如:$myvar0=0$((myvar0++))$echo$myvar01$((myvar0+=10))$echo$myvar011通过这些选项,您可能会发现它们很容易记住,也很容易使用。您还可以删除一个变量——这意味着它没有被定义。$unsetmyvar$echo$myvar另一个有趣的选项是您可以设置变量并将其设为只读。换句话说,一旦一个变量被设置为只读,它的值就不能改变(除非一些非常复杂的命令行魔法)。这意味着你也不能删除它。$readonlymyvar3=1$echo$myvar31$((myvar3++))-bash:myvar3:readonlyvariable$unsetmyvar3-bash:unset:myvar3:cannotunset:readonlyvariable您可以使用这些设置和增量选项来分配和操作变量在脚本中,但也有一些非常有用的内部变量可以在脚本中使用。请注意,您不能重新分配或增加它们的值。内部变量脚本中可以使用许多变量来计算参数和显示有关脚本本身的信息。$1、$2、$3等代表脚本的第一个、第二个、第三个等参数。$#表示参数个数。$*表示所有参数。$0代表脚本的名称。$?指示先前运行命令的返回码(0表示成功)。$$显示脚本的进程ID。$PPID显示shell(脚本的父进程)的进程ID。其中一些变量也适用于命令行,但显示相关信息:$0显示您正在使用的shell的名称(例如,-bash)。$$显示shell的进程ID。$PPID显示shell的父进程(对我来说是sshd)的进程ID。要查看它们的结果,如果我们将所有这些变量放入脚本中,例如:#!/bin/bashecho$0echo$1echo$2echo$#echo$*echo$?echo$$echo$PPID当我们调用时,使用这个脚本时,我们将看到以下内容:$tryme一二三/home/shs/bin/tryme<==脚本名称一<==第一个参数二<==第二个参数3<==参数一二三<==所有参数0<==lastechocommandreturncode10410<==script'sprocessID10109<==parentprocessID如果我们在脚本运行完成后检查shell的进程ID,我们可以看到它与脚本中显示的PPID匹配:$echo$$10109<==shell的进程ID当然,有一种比简单地显示它们的值更有用的方法来使用它们。让我们来看看它们的可能用途。检查是否提供了参数:if[$#==0];然后echo"$0filename"exit1fi检查特定进程是否正在运行:ps-ef|grepapache2>/dev/nullif[$?!=0];然后echoApache没有运行exitfi在尝试访问文件之前验证该文件是否存在:if[$#-lt2];然后echo"Usage:$0linesfilename"exit1fiif[!-f$2];thenecho"Error:File$2notfound"exit2elsehead-$1$2fi在下面的小脚本中,我们检查提供的参数数量是否正确,第一个参数是一个数字,以及第二个参数代表的文件存在。#!/bin/bashif[$#-lt2];然后echo"Usage:$0linesfilename"exit1fiif[[$1!=[0-9]*]];然后echo“错误:$1不是数字”exit2fiif[!-f$2];thenecho"Error:File$2notfound"exit3elseechotopoffilehead-$1$2fi重命名变量在编写复杂的脚本时,为脚本的参数分配名称通常很有用,而不是继续引用它们如$1、$2等。到第35行,阅读您的脚本的人可能已经忘记$2的含义。如果将某个重要参数的值赋给$filename或$numlines,就不容易忘记。#!/bin/bashif[$#-lt2];然后echo"Usage:$0linesfilename"exit1elsenumlines=$1filename=$2fiif[[$numlines!=[0-9]*]];然后回显“错误:$numlines不是数字”退出2fiif[!-f$文件名];thenecho"Error:File$filenamenotfound"exit3elseechotopoffilehead-$numlines$filenamefi当然,这个示例脚本只是运行head命令来显示文件中的前x行,但它的目的是显示如何在脚本中使用内部参数来帮助确保脚本运行良好,或者当它失败时,很清楚失败的原因。
