[TOC]
目录获取
1 | # 获取bash运行所在目录 |
补充:
1 | $() |
bash特殊变量:\$0, \$#, \$*, \$@, \$?, \$\$和命令行参数
变量 | 含义 |
---|---|
$0 | 当前脚本的文件名。 |
$n | 传递给脚本或函数的参数。n 是一个数字,表示第几个参数。例如,第一个参数是\$1,第二个参数是\$2。 |
$# | 传递给脚本或函数的参数个数。 |
$* | 传递给脚本或函数的所有参数。 |
$@ | 传递给脚本或函数的所有参数。被双引号(“ “)包含时,与 \$* 稍有不同,下面将会讲到。 |
$? | 上个命令的退出状态,或函数的返回值。 |
$$ | 当前Shell进程ID。对于 Shell 脚本,就是这些脚本所在的进程ID。 |
\$* 和 \$@ 的区别
$ 和 $@ 都表示传递给函数或脚本的所有参数,不被双引号(“ “)包含时,都以”\$1” “\$2” … “\$n” 的形式输出所有参数。
但是当它们被双引号(“ “)包含时,”\$\“ 会将所有的参数作为一个整体,以”\$1 \$2 … \$n”的形式输出所有参数;”\$@” 会将各个参数分开,以”\$1” “\$2” … “\$n” 的形式输出所有参数。
退出状态
\$? 可以获取上一个命令的退出状态。所谓退出状态,就是上一个命令执行后的返回结果。 退出状态是一个数字,一般情况下,大部分命令执行成功会返回 0,失败返回 1。 不过,也有一些命令返回其他值,表示不同类型的错误。
read命令
read命令接收标准输入(键盘)的输入,或者其他文件描述符的输入。得到输入后,read命令将数据放入一个标准变量中。
1.基本读取
1 |
|
其等效于以下:
1 | read -p "Enter your name:" name #-p参数,允许在read命令行中直接指定一个提示 |
在上面read后面的变量只有name一个,也可以有多个,这时如果输入多个数据,则第一个数据给第一个变量,第二个数据给第二个变量。如果输入数据个数过多,则最后剩下的所有值都给最后一个变量,如果太少输入不会结束。
2.在read命令行中也可以不指定变量
如果不指定变量,那么read命令会将接收到的数据放置在环境变量REPLY中
1 | read -p "Enter a number" |
3.计时输入
使用read命令存在着潜在危险。脚本很可能会停下来一直等待用户的输入。如果无论是否输入数据脚本都必须继续执行,那么可以使用 -t 选项指定一个计时器,指定read命令等待输入的秒数。当计时满时,read命令返回非零值(0为正常退出状态);
1 |
|
4.设置计数输入的字符
当输入的字符数目达到预定数目时,自动退出,并将输入的数据赋值给变量。
1 |
|
该例子使用了-n选项,后接数值1,指示read命令只要接受到一个字符就退出。只要按下一个字符进行回答,read命令立即接受输入并将其传给变量。无需按回车键。
5.默读(输入不显示在监视器上)
有时不希望输入的数据显示在监视器上。典型的例子就是输入密码,当然还有很多其他需要隐藏的数据。-s 选项能够使read命令中输入的数据不显示在监视器上(实际上,数据是显示的,只是read命令将文本颜色设置成与背景相同的颜色)。
1 |
|
6.读文件
每次调用read命令都会读取文件中的”一行”文本。当文件没有可读的行时,read命令将以非零状态退出。读取文件的关键是如何将文本中的数据传送给read命令。最常用的方法是对文件使用cat命令并通过管道将结果直接传送给包含read命令的while命令 。
1 | !/bin/bash |
参考:
https://blog.csdn.net/chinabestchina/article/details/78713505
https://blog.csdn.net/worldchinalee/article/details/82706426
https://www.cnblogs.com/xiangzi888/archive/2012/03/27/2420084.html