linux bash的变量有多种
用户自定义的变量,环境变量,语系变量,位置参数变量,预定义变量
预定义变量
在linux shell下执行一条命令,都会有一个返回值,这个返回值就保存到$?中,可以用echo $?输出查看
$?只保存最后一次命令执行的返回值,当这条命令正确执行时,返回0,执行出错时返回非零的一个数,具体是多少,这个得看当时写这个shell命令的作者的意图了。有一些常见的返回值,命令未找到,返回127,文件没找到,返回2等等。
利用命令执行后的返回值,可以结合逻辑或,逻辑与的表达式,写个控制两个命令如何执行的小应用
ls && grep
这样的表达式,能够控制两个命令里,只有一个命令被正确的执行。当第一条命令正确执行后,返回0,此时根据表达式的短路原理,不会执行第二个命令。而当第一个命令错误的执行时,必须执行第二个命令才可以获得表达式的值。通过这样的表达式求值过程,达到两个命令里执行一个正确命令的目的
ls || grep
这样的表达式,能够控制两个命令必须正确执行。 当第一条命令执行后,返回0 ,意味着,必须执行第二个命令,才能获得表达式的值。这样,通过这表达式的求值,达到两个命令必须正确执行的目的。
$$
通过echo $$ 可以查看当前进程的进程号
$!
有些命令执行的很慢,执行不完的命令,你只能在命令行下苦苦地等待。这个时候,有一个&符号可以帮助你。在输入每个命令的最后,都可以键入&,来控制使这个命令在后台执行,而前台并不耽误别的事情。而后台刚刚执行的命令,或者最后一次执行的命令的进程号,可以通过echo $!来查看。
read命令
read命令有点像C语言中的scanf命令,可以在命令行上输出提示符来提示执行某一个命令或者程序时,如何输入参数等,达到提示的一个效果,并且还有一些额外的控制
\p 可以在这个参数后输入提示信息,如“please input ...."
\t 控制等待用户输入时的时间,以秒为单位
\s 能够把输入的信息隐藏起来,保护敏感信息,类似于表单的password
\n 控制用户输入的字符个数,用户输入完指定个数的字符后,系统就会认为用户已经输入完毕,该命令可以执行了,
read \p "please input your name" name
echo $name
read \p "input your sex(M/F) " \n sex
read \p "input your age" \s \t 30 age