shell學習1 基本的shell命令

2022-05-05 06:00:08 字數 3173 閱讀 8439

基本指令碼

反引號:

``  反引號裡面的內容是命令列,通過反引號使用者可以將shell命令的輸出賦給變數,比如:

test=`date +%y%m%d`

echo 「the time is :」 $test

重定向:

輸出重定向:

就是將shell命令的輸出結果傳送到乙個檔案裡面

格式:command >  file

如果目標檔案裡面已經有內容了,那麼會將原有的內容清除並新增新內容,如果不想改動原來檔案的內容,就將「>」換成」>>」,表示追加

輸入重定向:

和輸出重定向相反,它是把檔案的內容重定向給命令進行操作

格式:command  <   file

比如有乙個檔案test,我們要在終端中將裡面的內容排序之後輸出在終端上

sort  <  test

」<<」稱為內聯輸入重定向,這種方法允許你在命令列而不是在檔案指定輸入重定向的資料,其實也就是將前面輸入重定向的file換成了你在終端輸入的資料

當使用者在最後輸入了eof,那麼就會終止操作

格式:command  <<  marker

data

marker

wc  <<  eof

>test  string  1

>eof

這樣就會輸出test文字中行數、詞數(第一行)、位元組數(第一行)

為了更好理解重定向,先了解一下標準檔案描述符

檔案描述符

縮寫描述

0stdin

標準輸入

1stdout

標準輸出

2stderr

標準錯誤

在使用輸入重定向」<」的時候,linux會用重定向指定的檔案來替換標準輸入檔案描述符,它會讀取檔案並提取資料,就好像是使用者在鍵盤輸入資料一樣

比如,我們cat  的時候,它會接收stdin的輸入,當使用者每行輸入一段資料,資料會馬上輸出在終端。當我們輸入cat  <  file的時候,就是把file中的每行資料作為輸入,然後cat出來.

實際上1>就等同於》

重定向錯誤和資料

利用1>符號將命令本該輸出到stdout的正常輸出重定向到該符號後面加的檔案,利用2>可以將本該輸出到stderr的錯誤資訊重定向到該符號後的檔案,兩個符號可以同時使用

cat  test  2>  test1  1>  test2

當使用&>符號的時候,命令生成的所有輸出都會傳送到同一位置,包括了錯誤和資料。&表示等同於,2>&1就是表示2的輸出重定向等同於1標準輸出

file  2>1:如果沒有file這個檔案就把錯誤輸出到檔案1中

2>&1  >file:錯誤輸出到終端,標準輸出被重定向到檔案file中。&和1結合可以分析為標準輸出,然後加上前面的》2就是代表錯誤重定向到標準輸出

>file  2>&1:標準輸出被重定向到檔案file,然後錯誤輸出也重定向到和標準輸出一樣,也是輸出到檔案file中,其實這樣的效果就像&>那樣。那麼為什麼不直接用》file  2>file呢,這是因為這樣操作之後標準輸出和標準錯誤輸入到檔案file之後會形成相互覆蓋的結果。而且,這樣的操作相當於開了兩個互相競爭使用檔案file的管道,如果按照前面那樣操作就只開乙個管道,但是已經包含了標準輸出和標準錯誤,有更高的效率

>file  2>&1  &:和前面不加&的效果類似,最後乙個&是為了命令在後台中執行

>/dev/null  2>&1:等同於1>/dev/null  2>/dev/null,預設情況下是1(標準輸出)。這裡的含義就是:標準輸出重定向到/dev/null,而標準錯誤又被重定向到標準輸出,因此標準輸出和標準錯誤都重定向到/dev/null,其實就等同於&>  /dev/null。/dev/null實際上是乙個黑洞檔案,任何內容輸入到這裡都會被銷毀

2>&1  >/dev/null:標準錯誤輸出到終端,而標準輸出不輸出在終端

思考一下前面為什麼有的要將2>&1放在後面

command  file  2>&1是標準錯誤拷貝了標準輸出的行為,也就是同樣重定向到file中,最後的結果就是將標準輸出和標準錯誤都重定向到file中

command  2>&1  >file也是標準錯誤拷貝了標準輸出的行為,但是由於前面沒有加檔案,此時的標準輸出還是在終端,當使用了》file之後才重定向到file,但是標準錯誤還是在終端輸出

總結一下:當2>&1出現在file前面,那麼就是將標準錯誤輸出到終端而標準輸出輸出到file,當2>&1出現在file後,那麼就是將標準輸出和標準錯誤都輸出到file

管道符

使用管道符,可以將管道符前乙個命令的結果作為輸入傳遞給管道符後的命令

指令碼退出

$?專屬變數用來儲存上個執行的shell命令的退出狀態

成功執行之後返回0,失敗返回127(沒找到命令)。其他一些狀態碼:

狀態碼描述

1通用未知錯誤

2錯誤使用shell命令

126命令不可執行

128無效的退出引數

128+x

linux訊號x的嚴重錯誤

130命令是通過ctrl+c退出

255退出狀態碼越界

當在exit命令的結尾加入引數,輸出$?的時候就是前面這個引數

運算

shell運算相關的命令有expr

比如expr  1+2

但是有時候就要轉義,比如expr  1*3會報錯,要用expr  1\*3

所以為了避免這些麻煩,使用者可以使用方括號將運算表示式包含起來,比如

$var=$[1+2]

echo  $var

$var2=$[$var*3]

echo $var2

前面的運算都是基於整型的,浮點運算的解決要引入bc命令

輸入bc的時候會彈出一些歡迎資訊,如果要取消,輸入bc  -q。退出bc要輸入quit

demo:

echo $(val=`echo 「scale=3;3.3/4」  | bc`

technorati tags: shell

參考:

shell 基本學習

1 檢視當前shell echo shell 2 檢視相容shell more etc shells 3 指令碼第一行 bin bash 4 變數 變數名稱的開頭是乙個字母或下劃線符號,後面可以接著任意長度的字母 數字或下劃線符號 first isaac middle bashevis last s...

shell程式設計 1 shell 基本指令

shell 指令 head test 1.txt 檢視最前面 10 行 head n 15 test 1.txt 檢視 前15 行 tail test 1.txt 檢視 最後 10行記錄 tail n 15 test 1.txt 檢視最後15行記錄 tail f test 1.txt 檢視實時記錄 ...

shell基本命令1

基礎命令 1.顯示時間和日期的命令 date date 2014年 02月 23日 星期日 14 59 20 cst date y m d 2014 02 23 date h m 14 59 2.顯示日曆 cal cal 二月 2014 日 一 二 三 四 五 六 1 2345 678 910111...