1.12 读取命令序列输出
所谓命令序列就是指 一个命令的输出作为 另一个命令的输入 这样的多个命令序列组合起来。最后可以把命令序列的输出重定向到文件中,或保存到一个变量中。
将命令序列输出保存到变量中有两种方法:
1、子shell
var=$(COMMANDS)
2、反引用
var=`COMMANDS` 命令用反引号 引起来
子shell是一个独立的进程,命令在子shell中执行时,对当前shell没有影响,所有的改变仅限于子shell中。如下面的例子中,进入到子shell中执行ls命令,可发现当前shell的目录路径没有变化。
1
2
3
4
5
|
[root@localhost ~]
# mkdir -p test1/test2
[root@localhost ~]
# pwd;(cd test1;ls);pwd
/root
test2
/root
|
书上说通过子shell或反引用输出到变量中内容会自动去掉空格和换行符,但是在centos6上试验了一下,并没有出现这种情况,如下:
1
2
3
4
5
6
7
8
9
10
11
|
[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结合使用可以打印提示
1
2
3
4
5
6
7
8
9
|
[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作为字段分隔符
使用方式如下,指定分隔符时加不加""都行
1
2
3
4
|
[root@localhost ~]
# IFS=:;var=hello:world;echo $var
hello world
[root@localhost ~]
# IFS=",";var=hello,world;echo $var
hello world
|