最近需要學習有關shell的知識,蒐集的資料
通常情況下,我們從命令列輸入一個命令就能得到系統的響應。但是,當我們要一個接一個的輸入命令而只是希望得到最後的結果時,這樣做就顯得沒有效率了。要達到這樣的目的,我們利用shell指令碼來實現。
由系統提供的引數稱為位置引數。位置引數的值可以用$N得到,N是一個數字,即,如果N=1,那麼位置引數為$1,和c語言中的陣列比較類似。Linux中,會把輸入的命令字串進行分段並進行編號,從0開始。第0號表示為程式名字,從1開始就是表示傳遞給程式的引數。例如:$0表示程式的名字,$1表示傳遞給程式的第一個引數,依次類推。
在上一節中說到$0,是一個內建引數,是必須的,而像$1則是可有可無的。和$0一樣的內部變數還有一下幾個:
$#:傳遞給程式的引數數量
$?:上一個程式碼或者shell程式在shell中退出的返回值,如果正常退出則返回0,反之返回非0數。
$*:傳遞給程式的所有引數組成的字串。
利用內建引數別寫刪除一個檔案的指令碼。
例:
點選(此處)摺疊或開啟
- #name :del
- #this program to compress a file to thedustbin
- if test $# -eq 0
- then
- echo “please specify a file”
- else
- gzip $1
- mv $1.gz $HOME/dustbin
- echo “file $1 is deleted!”
- fi
首先在目錄下面建立一個空白檔案,用於測試。
touch 1
執行指令碼程式:sh del.sh 1
程式執行完後,提示檔案已經刪除。然後再ls一把,檢視1檔案是否還存在。
上面的程式中,用到了一個關鍵字test,他是shell程式中的一個表示式比較。通過和shell提供的if等條件語句相結合可以方便的判斷。
其用法如下:
test 表示式
表示式所代表的操作符有字串操作符、數字操作符、邏輯操作符以及檔案操作符。
作用:測試字串是否相等、長度是否為0,字串是否為NULL(注:bash區分零長度字串和空字串)
字串操作符:
=:比較兩個字串是否相同,相同則為“是”;
!=:比較兩個字串是否相同,不同則為“是”;
-n:比較字串長度是否大於0,如果大於0則為“是”;
-z:比較字串長度是否等於0,如果等於則為“是”;
數字比較符:
-eq:相等
-ge:大於等於
-le:小於等於
-ne:不等於
-gt:大於
-lt:小於
邏輯操作:
!:取反,與一個邏輯值相反的邏輯值。
-a:與(and),兩個邏輯值為“是”,返回值為“是”,反之為“否”
-o:或(or),兩個邏輯值有一個為“是”,返回值就為“是”
檔案操作:
檔案測試表示式通常是為了測試檔案資訊,一般由指令碼來決定檔案愛你是否應用備份、複製和刪除。常用的檔案操作符有:
-d:物件存在而且是目錄返回“是”
-f:物件存在而且是檔案返回“是”
-L:物件存在而且為符號連線返回“是”
-r:物件存在而且可讀則返回“是”
-s:物件存在而且長度非零則返回“是”
-w:物件存在而且可寫則返回值為“是”
-x:物件存在而且可執行則返回“是”
shell中常見的迴圈語句有for迴圈、while迴圈、until迴圈。
for迴圈
語法:for 變數 in 列表
do
操作
done
變數是要在迴圈列表內部用來指代當前所指代的別表中的那個物件的。
列表是在for迴圈的內部要操作的物件,可以是字串也可以是檔案,如果是檔案,那麼列表就是檔名了。
例:刪除垃圾信箱中的.gz檔案
點選(此處)摺疊或開啟
- # delete all file with extension of “gz” in the dustbin
- for I in $HOME/dustbin/*.gz
- do
- rm ?CF $i
- echo “$i has been deleted”
- done
while迴圈
語法:while表示式
do
操作
done
只要while表示式成立,do和done之間的操作就會一直在進行
until迴圈
語法:until 表示式
do
操作
done
重複do到done之間的操作直到表示式成立。
點選(此處)摺疊或開啟
- #test until
- #add from 1 to 100
- total=0
- num=0
- until test num –eq 100
- do
- total=`expr $total + $num`
- num=`expr $num + 1`
- done
- echo “the result is $total”
條件語句
shell中的條件語句主要有if語句、case語句
if語句
語法:if 表示式1 then
操作
elif 表示式1 then
操作
elif 表示式3 then
操作
……..
else
操作
fi
在shell裡的if結束標誌是將if反過來寫成fi;而elif其實就是else if的縮寫。
case語句
語法:case 字串 in
值1|值3)
操作;;
值2|值4)
操作;;
……
*)
操作;;
ease
case的作用就是當字串與某個值相同就執行那個值後面的操作。如果同一個操作對應多個值,則使用“|”將各個值分開。
例:
點選(此處)摺疊或開啟
- case $USER in
- csj)
- echo “you are csj”;;
- root)
- echo “you are root”;
- echo “welcome!”;;
- *)
- echo “who are you? $USER”;;
- esac
執行這個指令碼,程式根據你的登入使用者名稱,列印相關的資訊。
補充:1、程式必須是以#!/bin/sh開始,是用來告訴系統後面的引數是用來執行該文的程式。
2、命令
read var:提示使用者輸入,並將輸入值賦給變數。
sort file:對檔案中的行進行排序。
expr:進行數學運算。
tee:將資料輸出到標準輸出裝置和檔案。
dirname file:返回檔案所在的路徑。
head file:列印檔案的開頭幾行,預設是10行,通過-n指定行數。
tail file:列印文字檔案末尾幾行,預設是10行,通過-n指定行數。
管道:將一個命令的結果做另一個命令的輸入。
grep “hello” file | wc –l
重定向:將命令的結果輸出到檔案,而不是標準輸出。
>:寫入檔案並覆蓋舊檔案的內容
>>:加到檔案的末尾,保留舊檔案內容。
相關文章
- 學習大資料需要掌握的知識,需要學習的資料技術大資料
- 學大資料需要掌握的知識,需要學習的資料技術大資料
- 資料庫MySQL需要學習基本知識資料庫MySql
- DBA需要掌握的Shell知識
- 關於強化學習需要了解的知識強化學習
- 有關自定義View的學習知識點View
- 最近學到的ABTest知識
- IDSIPS相關知識〔蒐集〕
- 大資料學習,涉及的知識點大資料
- 大資料學習四:網路相關知識大資料
- 零基礎如何學好大資料?必備需要學習知識大資料
- 蒐集到的Weex 相關資料
- Shell相關知識
- shell環境變數有哪些知識?linux運維的學習路線變數Linux運維
- 學習資料庫的基礎知識的書籍資料庫
- 學習Java,還需要學好哪些知識Java
- 人工智慧需要學習的知識技能有哪些?人工智慧
- 大資料入門到精通,想入行大資料需要學習這些知識大資料
- shell相關知識點
- 關於學習Web前端所需要的學習資料(免費送)Web前端
- 學習DDD新人,需要入門的資料,可以有麼?
- 有關Domino群集的知識
- 怎麼學好Java?需要學習哪些知識?Java
- 新手學習Java需要了解的幾個知識點!Java
- 關於機器學習需要了解的知識機器學習
- 學習大資料需要掌握MySQL資料庫的相關技能嗎?大資料MySql資料庫
- 學習React之前你需要知道的的JavaScript基礎知識ReactJavaScript
- 網路學習英文的資源站點蒐集
- 學習雲端計算好就業嗎?需要學習哪些知識?就業
- 大資料工程師需要掌握的知識點大資料工程師
- 學習人工智慧AI需要哪些最基礎的知識?人工智慧AI
- 如何更高效的系統學習大資料方面知識?大資料
- 關於Java兩點需要更新的知識Java
- 想從事資料科學領域,需要多少數學知識?資料科學
- 學大資料開發要掌握的基礎知識有哪些?大資料
- 機器學習和深度學習資源蒐集機器學習深度學習
- Java程式設計師需要學習哪些知識?Java程式設計師
- mysql資料庫學習基礎知識整理MySql資料庫