基本指令碼
反引號:
`` 反引號裡面的內容是命令列,通過反引號使用者可以將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...