Linux shell 2

來源:互聯網
上載者:User

 第三章 Shell輸入和輸出
3.1.1 echo
echo 命令可以顯示文本行或變數,或者把字串輸入到檔案
echo [option] string
- -e 解析逸出字元
- -n 斷行符號不換行,linux系統預設斷行符號換行
-轉義符(\c,\f,\t,\n)
\c斷行符號不換行
\f 禁止
\t Tab
\n斷行符號換行

3.2.1 read
read語句可以從鍵盤或檔案的某一行文本中讀入資訊,並將其賦給一個變數
read varible1 varible2 ...
如果只指定了一個變數,那麼read將會把所有的輸入賦給該變數,直至遇到
第一個檔案結束符或斷行符號;如果給出來多個變數,它們按順序分別被賦予不同
的變數。shell將用空格作為變數之間的分隔字元。

3.3.2 cat
cat是一個簡單而通用的命令,可以用它來顯示檔案內容,建立檔案,還可以用
它來顯示控制字元。
cat [options] filename2 ... filename2 ...
- -v顯示控制字元
- 使用cat命令時要注意,它不會在檔案分頁符處停下來;它會一下顯示完整個
檔案。如果希望每次顯示一頁,可以使用more命令或把cat命令的輸出通過管道
傳遞到另外一個具有分頁功能的命令中(more,less).
- man cat
cat myfile1
cat myfile1 myfile2 myfile3
cat myfile1 myfile2 myfile3 >myfile
cat myfile

3.4.1 管道
可以通過管道把一個命令的輸出傳遞給另一個命令作為輸入。管道用豎杠|表示
格式:命令1|命令2
df -k | awk '{print $1}' | grep -v "Filesystem"

3.5.1 tee
tee命令把輸出的一個副本輸送到標準輸出,另一個副本拷貝到相應的檔案中
tee -a files
如果系統在看到輸出的同時,也將其存入一個檔案,那麼這個命令再合適不過了
一般用於管道之後
-a 把內容追加到檔案中,如果沒有-a,將覆蓋檔案內容

3.6.1 標準輸入、輸出和錯誤
在shell中執行命令時,每個進程都和三個開啟的檔案相聯絡,並使用檔案描述符
來引用這些檔案。由於檔案描述符不容易記憶,shell同時也給出了相應的檔案名稱。

      檔案                      檔案描述符
輸入檔案——標準輸入         0(預設是鍵盤,也可以是檔案或其他命令的輸出)
輸出檔案——標準輸出         1(預設是螢幕,也可以是檔案)
錯誤輸出檔案——表示錯誤     2(預設是螢幕,也可以是檔案)

系統中實際上有12個檔案描述符,可以任意使用檔案描述符3到9

3.7.1 檔案重新導向
改變程式啟動並執行輸入來源和輸出地點

command > filename            把標準輸出重新導向到一個新檔案中(會覆蓋原檔案)
command >> filename           把標準輸出重新導向到一個檔案中(追加)
command 1 > filename      把標準輸出重新導向到一個檔案中
command>filename 2 >&1        把標準輸出和標準錯誤一起重新導向到一個檔案中
command 2 > filename          把標準錯誤重新導向到一個檔案中
command 2 >> filename         把標準錯誤重新導向到一個檔案中(追加)
command >>filename 2>&1     把標準輸出和標準錯誤一起重新導向到一個檔案中(追加)
command<filename>filename2      command命令以filename檔案作為標準輸入,
                以filename2檔案作為標準輸出
command < filename       command命令以filename檔案作為標準輸入
command << delimiter      在標準輸入中讀入,直到遇到dilimiter分界符
command < &m          把檔案描述符m作為標準輸入
command > &m          把標準輸出重新導向到檔案描述符m中
command < &-          關閉標準輸入

重新導向標準輸出
cat file | sort 1>sort.out
cat file | sort >sort.out   這兩個命令等同
pwd >>path.out
>nullfile.txt 建立0位元組的檔案

重新導向標準輸入
sort<file
sort<name.txt>name.out

[root@localhost shell]# cat >> term.txt << SHELL
> hello,there I am using a $TERM terminal
> and my username is $LOGNAME
> bye ...
> SHELL
[root@localhost shell]# cat term.txt
hello,there I am using a vt100 terminal
and my username is root
bye ...

標準錯誤

[root@localhost shell]# grep "trident" miss 2> errmsg
[root@localhost shell]# cat errmsg 
grep: miss: 沒有那個檔案或目錄

3.8.1 結合使用標準輸出和標準錯誤
[root@localhost shell]# cat myfile.txt abbb 1>accounts.out 2>accounts.err
[root@localhost shell]# cat accounts.out
aa
ccc
vvvv
nnn
dd
sss
[root@localhost shell]# cat accounts.err 
cat: abbb: 沒有那個檔案或目錄

3.9.1
合并標準輸出和標準錯誤
合并標準輸出和標準錯誤的時候,切記shell是從左至右分析相應的命令
grep "standard" standart.txt > grep.out 2>&1
在檔案standart.txt尋找standard內容輸出到grep.out中,如果遇到錯誤輸出到
螢幕中,螢幕的內容輸出到grep.out中
正確輸出和錯誤輸出結果都會輸出到grep.out檔案中
[root@localhost shell]# grep "standard" standart.txt > grep.out 2>&1
[root@localhost shell]# cat grep.out 
grep: standart.txt: 沒有那個檔案或目錄

3.10.1 exec
exec命令可以用來替代當前shell;換句話說,並沒有啟動子shell,使用這一命令
時任何現有環境將會被清空,並重新啟動一個shell。
exec command 
  其中的command通常是一個shell指令碼。
對檔案描述符進行操作的時候(也只有在這時),它不會覆蓋你當前的shell

3.11.1檔案描述符
3-9檔案描述符可以供我們使用,0-2是系統預設的

exec與檔案描述符的結合
[root@localhost shell]# cat file_desc 
#!/bin/bash
#file_desc
exec 3<&0 0<name.txt
read line1
read line2
exec 0<&3
echo $line1
echo $line2
[root@localhost shell]# ./file_desc 
aaaa
ddfd

             第四章 控制流程結構
4.1 if語句
if 條件1       如果條件1成立
then           那麼
  命令1      執行命令1
elif 條件2     如果條件1不成立
then           那麼
  命令2      執行命令2
else           如過條件1,2均不成立
  命令3      那麼執行命令3
fi             完成

if 條件1
then 命令
fi

if [ "10" -lt "12" ]
then echo "Yes,10 is less than 12"
   #yes 10 is less than 12
fi

if [ "10" -lt "12" ]
then
   #yes 10 is less than 12
   echo "Yes,10 is less than 12"
fi

if [ "13" -lt "12" ]
then 
   echo "Yes,13 is less than 12"
   #yes 10 is less than 12
else
   echo "NO,1 is greater than 12"
fi


#!/bin/bash
#if test3
echo -n "Enter you name:"
read NAME
#did the user just hit return 
if [ "$NAME" == "" ]
then 
   echo "You did not enter you name"
else
   echo "You Name is ${NAME}"
fi

#!/bin/bash
#if elif else fi
echo -n "Enter you name:"
read NAME
if [ -z $NAME ] || [ "$NAME" = "" ];then
   echo "You did not enter you name"
elif [ "$NAME" = "root" ];then
   echo "Hello root"
elif [ "$NAME" = "aaa" ];then
   echo "Hellp aaa"
else
   echo "You are not root or aaa,but hi,$NAME"
fi

4.2.1 case語句
case語句為多選擇語句。可以用case語句匹配一個值與一個模式,如果匹配
成功,執行相匹配的命令。

case 值 in
模式1)
   命令1
   ;;
模式2)
   命令2
   ;;
esac
case取值後面必須為單詞in,每一模式必須以右括弧結束,取值可以為變數或常量
。匹配發現取值符合某一模式後,其間所有命令開始執行直至;;。模式比對符*
表示任一字元,?表示任意單字元,[..]表示類或範圍中的任一字元。
#!/bin/bash
#case select
echo -n "Enter a number from 1 to 3:"
read NUM
case $NUM in
1)
   echo "You select 1"
   ;;
2)
   echo "You select 2"
   ;;
3)
   echo "You select 3"
   ;;
*)
   echo "`basename $0`:This is not between 1 and 3">&2
   exit;
   ;;
esac

4.3.1 for迴圈
for迴圈的一般格式為:
for 變數名 in 列表
do
 命令
 命令1
done
當變數值在列表裡,for迴圈即執行一次所有命令,使用變數名訪問列表中取值。
命令可為任何有效shell命令和語句。變數名為任何單詞。in列表用法是可選
的,如果不用它,for迴圈使用命令列的位置參數。in列表可以包含替換、字串
和檔案名稱
#!/bin/bash
#fortest1\
for loop in 1 2 3 4 5
do
  echo $loop
done

#!/bin/bash
#fortest2
for loop in "oranger red bue grey"
do
  echo $loop
done

#!/bin/bash
#fortest2
for loop in oranger red bue grey
do
  echo $loop
done

4.4.1 until迴圈
until迴圈一般格式為:
until 條件
do
  命令1
  命令2
  ...
done

註:條件可為任意測試條件,測試發生在迴圈末尾,因此迴圈至少執行一次

`df | grep /backup | awk '{print $5}' | sed 's/%//g'`

4.5.1 while迴圈
while迴圈一般格式為:
while 命令
do
  命令1
  命令2
  ...
done
註:在while和do之間雖然通常只使用一個命令,但可以放幾個命令,命令
通常用作測試條件。

#!/bin/bash
#while test 從鍵盤輸入內容
echo "按住<ctrl>+D退出輸入。"
while echo -n "輸入你最喜歡的電影:";read FILM
do
  echo "Yeah,${FILM}是一部好電影!"
done

#!/bin/bash
#while read 從檔案中讀取內容
while read LINE
do
  echo $LINE
done<names.txt

4.6.1 break和continue
break[n]
退出迴圈
如果是在一個嵌入迴圈裡,可以指定n來跳出的迴圈個數,預設是1

conitnue
跳出迴圈步
註:continue命令類似於break命令,只有一點重要區別,它不會跳出迴圈,
只是跳出這個迴圈步。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.