>file会造成死循环,因为它是一行行读出来的,永远都没有结束符
9.合并标准输出和标准错误
合并标准输出和标准错误的时候,切记shell是用左至右分析相应的命令
举例说明:
grep "hi" test.txt >test.out 2>&1 标准输出和错误输出都输入到标准输出中
10.使用文件描述符
举例说明:
exec 3 此时的exec不会清除环境变量,也不会重新登录,覆盖当前的sehll
三、流控制结构
1.if then else 语句
if 条件1 #如果条件1为真
then #那么
command1 #执行命令1
elif 条件2 # 如果条件2为真
then #那么
command2 # 执行命令2
else #如果条件1和条件2都不成立
command3 执行命令3
fi #完成(if 语句一定要以fi结束)
举例说明:
if [ "13" -lt "11"] #如果13小于11
then #那么
echo "13<11" #输出"13<11"
elif["13" -lt "12"] #如果13小于12
then # 那么
echo "13<12" #输出"13<12"
else #否则
echo "13>=12" #输出"13>=12"
2.case语句
case 值 in
模式1) #如果模式1匹配
命令1 #执行命令1
;;
模式2) #如果模式2匹配
命令2 #执行命令2
;;
*) #如果以上模式都不匹配
命令3 #执行命令3
;;
esac #结束case语句
case取值后面必须为单词in,每一模式必须以右括号结束。取值可以为变量或常数。匹配发现取值符合某一模式后,其间所有命令开始执行直至;;。模式匹配符号*表示匹配任意字符。[。。]表示类或者范围中的任意字符。
举例说明:
case $A in
1) #如果A的值为1
echo "A =1" #输出“A=1”
;;
2) #如果A的值为2
echo "A=2" #输出“A=2”
;;
[34]) #如果A的值为3或4
echo "A=3|4" #输出“A=3|4”
;;
esac #结束
3.for循环
for 变量名 in 列表
do
命令1
命令2
done
当变量值在列表里,for 循环即执行一次所有命令,使用变量名访问列表取值。命令可为任何有效的shell命令和语句。变量名为任何单词。in列表用法是可选的,如果不用它,for循环使用命令行的位置参数。in列表可以包含替换,字符串和文件名
举例说明:
for loop in 1 2 3 4 5 #在1 2 3 4 5列表中循环(5次)
do #开始执行命令
echo "hello" #执行命令
done #完成
for loop in "one two three" #当成一个元素只循环一次
do
echo $loop
done #输出 one two three 一行
for loop in one two three #三次循环
do
echo $loop
done
#输出 one
two
three
列表可以是文件,如:for loop in `cat myfile`
4.until循环
until 条件
do
命令1
命令2
done
条件可为任何测试条件,若刚开始条件就为真,则不执行循环。
5.while循环
while 命令
do
命令1
命令2
......
done
举例说明:while read LINE do
<