1.12 读取命令序列输出
所谓命令序列就是指 一个命令的输出作为 另一个命令的输入 这样的多个命令序列组合起来。最后可以把命令序列的输出重定向到文件中,或保存到一个变量中。
将命令序列输出保存到变量中有两种方法:
1、子shell
var=$(COMMANDS)
2、反引用
var=`COMMANDS` 命令用反引号 引起来
子shell是一个独立的进程,命令在子shell中执行时,对当前shell没有影响,所有的改变仅限于子shell中。如下面的例子中,进入到子shell中执行ls命令,可发现当前shell的目录路径没有变化。
[root@localhost ~]# mkdir -p test1/test2 [root@localhost ~]# pwd;(cd test1;ls);pwd /root test2 /root
书上说通过子shell或反引用输出到变量中内容会自动去掉空格和换行符,但是在centos6上试验了一下,并没有出现这种情况,如下:
[root@localhost ~]# cat a 1 2 3 [root@localhost ~]# var=$(cat a) [root@localhost ~]# echo $var 1 2 3按书上说打印var变量时显示格式应该为 1 2 3 这里并没有出现这种情况,如果出现这种情况,可在子shell命令两边加双引号,如下列命令 [root@localhost ~]# var="$(cat a)"
1.13 read命令
read var 读取输入的字符存入var变量
read -n num var 读取num个输入的字符存入var变量
read -p "提示符" var 显示提示信息,并将输入的字符存入var变量中。var和其前面的"一定要有空格
read -t num var 在num秒内读取输入的字符存入var变量中。输入完字符一定要敲回车键,否则会认为没有输入
read -d delim_char var 遇到定界符delim_char时结束输入并将定界符前的 输入存入变量var中。
read var1 var2 var3 从输入到第一个空格间的字符存入var1中,第一个空格到第二个空格的存入var2中,剩下的所有存入var3中
以不回显的方式读取字符并存入变量:
read -s var 下面是与-p结合使用可以打印提示
[root@localhost ~]# read -p "Enter passwd:" -s var;echo;echo passwd is $var Enter passwd: passwd is qa1 其中中间有个单独的echo语句是为了换行使用。 [root@localhost]# stty -echo;read -p "Enter:" var;stty echo;echo;echo passwd is $var Enter: passwd is qa1 这是第二种方法,stty -echo 禁止将输出发送到终端,stty echo则是允许发送
1.14 字段分隔符
IFS 内部字段分隔符,默认以空白字符作为字段分隔符(空白字符包括:换行、制表、空格)
格式 IFS "delim_char" 使用以delim_char作为字段分隔符
使用方式如下,指定分隔符时加不加""都行
[root@localhost ~]# IFS=:;var=hello:world;echo $var hello world [root@localhost ~]# IFS=",";var=hello,world;echo $var hello world
read命令参考http://man.linuxde.net/read