shell内部命令 ---I/O类

I/O

输出

echo

打印一个表达式或变量

echo Hello

echo $a

echo需要使用-e参数来打印转移字符

a='\\bcd' 
echo $a 		 // \\bcd
echo -e $a 		// \bcd

一般的每个echo命令都会在终端上新起一行,但是-n选项将会阻止新起一行。

echo ;echo;echoHello

echo命令可以作为一系列命令的管道输入。

#!/bin/bash

VAR="SDFDS45646TXTtxtsdfds566"

if echo "$VAR"| grep -q txt

then

echo "$VARcontains the substring sequence \"txt\""

else

echo "$VARIS NULL"

fi

$IFS(内部域分隔符)一般都会将\n(换行符)包含在它的空白字符集合中。Bash因此会根据参数中的换行来分离命令的输出。

然后echo将以空格代替换行来输出这些参数。

$ ls -l
total 8
-rwxr-xr-x 1 zghw zghw 165 8月 1 20:55 echo-1.sh
-rwxr-xr-x 1 zghw zghw 246 8月 1 20:03 spawn.sh
$ echo `ls -l`
total 8 -rwxr-xr-x 1 zghw zghw 165 8月 1 20:55 echo-1.sh -rwxr-xr-x 1 zghw zghw 246 8月 1 20:03 spawn.sh


read
从stdin中读取一个变量的值,也就是与键盘交互取得变量的值。使用-a参数可以取得数组变量。

#!/bin/bash
echo -n "Enter the value of variable 'var1'"
read var1
echo "var1=$var1"

echo -n "Enter the values of variables 'var2' 'var3' (separated by a space or tab):"

read var2 var3
echo "var2 = $var2 var3 = $var3"

exit 0

一个不带变量参数的read命令,将把来自键盘的输入存入到专用变量$REPLY中.
#!/bin/bash

echo -n "Enter a var:"
read var
echo "$var"
echo "\"var1\"="$var""

echo "$var1"

echo -n "Enter other var:"
read

echo "REPLY"





#!/bin/bash
read var1 < read-1.sh

echo "var1=$var1"

while read line
do
  echo "$line"
done < read-1.sh

echo "----------------------"
#使用$IFS(内部域分隔变量)来将每行的输入单独的放到“read”中
#如果不想使用默认空白的话
echo "List of all users:"
OIFS=$IFS; IFS=:      # $/etc/passwd 使用“:”作为域分隔符
while read name passwd uid gid fullname ignore 
do
  echo "name=$name passwd=$passwd uid=$uid gid=$gid fullname=$fullname ignore=$ignore"
done < /etc/passwd #I/O重定向

echo "-------------------"
IFS=$OIFS       #恢复原始的IFS

echo "-------------------"

#在循环内部设置$IFS变量而不是把原始的$IFS
#+保存在临时变量中
echo "List of all users:"
while IFS=: read name passwd uid gid fullname ignore 
do
  echo "name=$name passwd=$passwd uid=$uid gid=$gid fullname=$fullname ignore=$ignore"
done < /etc/passwd #I/O重定向

echo "\$IFS still $IFS"
echo "-------------------"
exit 0



 

你可能感兴趣的:(shell内部命令 ---I/O类)