linux中重定向学习总结
生活随笔
收集整理的這篇文章主要介紹了
linux中重定向学习总结
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
文件標(biāo)識符是從0到9結(jié)束的整數(shù),指明了與進(jìn)程有關(guān)的特定數(shù)據(jù)流源。當(dāng)Linux系統(tǒng)啟動一個進(jìn)程(該進(jìn)程可能用于執(zhí)行Shell命令)時,將自動為該進(jìn)程打開三個文件:標(biāo)準(zhǔn)輸入、標(biāo)準(zhǔn)輸出和標(biāo)準(zhǔn)錯誤輸出,分別由文件標(biāo)識符0、1、2標(biāo)識,如果進(jìn)程要打開其他的輸入和輸出文件,則從3開始標(biāo)識。另外3-9是保留的標(biāo)識符,可以把這些標(biāo)識符指定為標(biāo)準(zhǔn)輸入、標(biāo)準(zhǔn)輸出和標(biāo)準(zhǔn)錯誤輸出的臨時連接。通常這樣可以解決好多復(fù)雜的重定向請求。 下面舉一些由管道符連接的重定向的例子: 1.ls -l | sed -n '1,5p'--列出當(dāng)前目錄的子目錄或文件,并由sed命令打印前五個目錄或文件 2.more /etc/passwd | sed -n '/root/p' --查看passwd文件的內(nèi)容,并由sed匹配文件中包含root字符串的行 3.more /etc/passwd | sed -n '/root/p' | sed -n '/login/p' --查看以root登錄的用戶 4.var1="Hello world" var2="Beijing" echo $var1 | sed "s/world/$var2/g" --輸出將var1中的world替換為var2對應(yīng)的值的內(nèi)容(這里不能使用單引號,因為它不能進(jìn)行變量引用) 5.var1="Hello world" echo $var1|awk '{print length($0)}' --輸出變量的長度 6.var1="Hello world" echo $var1 | awk 'print length($1)' --輸出變量中第一個域的長度 7.var1."Hello world" echo $var1 | awk '{print substr($0,1,5)}' --輸出變量中的1至5個子字符串 echo $var1 | awk '{print substr($0,7)}' --輸出變量中從第七個字符串開始的子字符串 8.awk -F ':' '{print $1 | "sort"}' /etc/passwd --文件passwd中的內(nèi)容以冒號作為分隔符,打印第一個經(jīng)過排序的域 9.awk 'BEGIN{while (("ls /usr" | getline d)>0) print d}' --命令執(zhí)行結(jié)果通過getline方式獲取,并傳給變量d,如果變量d的值存在,就打印該值 10.who | tee /tmp/who.sh ?--將當(dāng)前用戶信息通過tee重定向到who.sh文件中,這里可以通過tee -a追加內(nèi)容到文件中。 IO重定向符號意義 cmd1 | cmd2 --cmd1的輸出作為cmd2的輸入 >filename --將輸出寫入到filename <filename --將文件內(nèi)容讀入到標(biāo)準(zhǔn)輸入中 >>filename --將輸出寫入到filename,如果文件有內(nèi)容,將會以追加形式寫入 >| filename --覆蓋filename的內(nèi)容 n > filename --將標(biāo)識符為n的內(nèi)容寫入到filename n < filename --將文件內(nèi)容讀入到標(biāo)識符n中 n >> filename --將標(biāo)識符n追加到filename中 例子: cat > filename --以標(biāo)準(zhǔn)輸入方式編輯文件的內(nèi)容,直到ctrl+d結(jié)束 ls -l | grep ".*.sh" >> filename --將搜索到符合擴展名為rc的文件名追加到filename中 ls -l | grep ".*.sh" >| filename --強制覆蓋內(nèi)容 ls -l z* 2>filename 假設(shè)當(dāng)前目錄沒有以z開頭的文件,將標(biāo)準(zhǔn)錯誤輸出重定向到filename中 代碼塊重定向是指在代碼塊內(nèi)將標(biāo)準(zhǔn)輸入或標(biāo)準(zhǔn)輸出重定向到文件,而在代碼塊之外還是保留默認(rèn)狀態(tài)。 代碼塊輸入重定向符號是<,輸出重定向符號是>。 例子.while代碼塊: #!/bin/bash #將ls /etc的結(jié)果寫到a.txt文件中 ls /etc > a.txt #搜索a.txt文件中與rc.d所匹配的行,輸出匹配行的行數(shù) while [ "$filename" != "rc.d" ] do #按行讀取a.txt內(nèi)容 read filename let "count"+=1 done < a.txt echo "$count times read" #測試循環(huán)體外面的標(biāo)準(zhǔn)輸入是否被重定向 echo -n "---------Pls.Input Data:---------" read test echo $test 例子.for代碼塊 #!/bin/bash #將ls /etc的結(jié)果寫到a.txt文件中 ls /etc >a.txt #計算a.txt文件的最大行數(shù),并賦給maxline變量 maxline=$(wc -l < a.txt) for filename in `seq $maxline` #利用seq產(chǎn)生循環(huán)參數(shù) do read filename #for 循環(huán)中需要有if語句指定跳出循環(huán)的條件 if [ "$filename" = "rc.d" ] then break else let "count+=1" fi done < a.txt #將輸入內(nèi)容復(fù)制到文件a.txt echo "$count times read" #測試循環(huán)體外面的標(biāo)準(zhǔn)輸入是否被重定向 echo -n "----Pls. Input Data:----" read test echo $test shell中eval的使用情況: 如果變量中包含任何需要Shell直接在命令中看到的字符,就需要使用eval命令。命令結(jié)束符(;,|,&)、IO重定向符(<,>)和引號這些對Shell具有特殊意義的符號,必須直接出現(xiàn)在命令行中。 例子: #!/bin/bash #NAME變量保存每行的第1列,VALUE變量保存每行的第2列 while read NAME VALUE do eval "${NAME}=${VALUE}" done < evalsource.sh #測試變量的值 echo "var1=$var1" echo "var2=$var2" echo "var3=$var3"
轉(zhuǎn)載于:https://www.cnblogs.com/confident1012/p/6323738.html
總結(jié)
以上是生活随笔為你收集整理的linux中重定向学习总结的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 跨域解决请求限制(script标签)(热
- 下一篇: 分布式技术追踪 2017年第四期