Linux基礎練習 04 shell

2021-10-09 03:09:46 字數 3630 閱讀 6832

指令碼例:

#!/bin/bash //shell的強宣稱

#never mind what it record here, cause it just a blank. //#注釋

echo -e 「hello world」 //shell內容

注意新建的指令碼需要賦權,儲存位置預設為bin/bash且不推薦換地方。

使用歷史

命令使用歷史預設先放入快取中,在關機或者登出當前使用者後再儲存在/.bash_history。命令history -c清空歷史 -w立即把快取中的歷史寫入儲存檔案 檢視歷史命令。

在「history」介面,輸入「!n」可以重複執行第n條命令一次,輸入「!!」可以重複執行上一條命令一次,輸入「!***」可以重複執行以「***」開頭的命令一次。

此外,對歷史命令的操作可以通過其別名進行,但是不需要所以擱置。

輸入輸出重定向

將命令輸入/輸出至指定的檔案/裝置。

格式:命令a &>(覆蓋) &>>(追加至) 檔案b,將命令a的結果覆蓋/追加至檔案b。

多命令順序執行

com1 : com2 com1/2依次執行

com1 && com2 com1執行成功則執行com2

com1 || com2 com1執行失敗則執行com2

com1 | com2 com1執行成功的結果輸入com2執行

dd複製

格式:dd if=input of=output bs=單包大小 count=預計傳送包數。

將input以bs/包,傳送count包數,到達output。

萬用字元,只能在完全匹配命令中使用,比如ls、find、cp…

「?」 任意乙個字元

「*」 0~∞個字元

「」 括號內字元,^內字元表示邏輯非。

如:#rm -rf *。將當前目錄下所有內容刪掉。

#grep ?ove /home。在/home目錄下搜尋所有?ove,比如aove、bove、love…

「『』」 單引號表示其中所有內容均為純字元且無特殊意義,比如』$ ls』表示$ ls三個字母而非ls命令。

「」」」 雙引號表示只有字元沒有特殊含義。比如「ls」表示ls兩個字母而非ls命令,但」$(ls)「表示ls命令的結果。

$() 引用系統命令。

$ 呼叫變數值。如name=a,echo name=name,則echo $name=a。

\ 轉義符,無實際意義。

自定義變數

不能以數字開頭,且預設為字串型。數值運算只能對數值型變數進行。命令set檢視本使用者所有變數,env查詢特定變數,unset刪除特定變數。

環境變數

在為自定義變數賦值前用export宣告,格式:#export age=17。

path存放著系統命令,一般用path中的命令不用絕對路徑,比如:ls、cd和chown…此外用命令ps1=『$』可以設計提示頭。請自行查詢設計。

引數位置設定

$n 當n=0表示命令本身,當n=表示第1~∞個引數。

$* 命令內所有引數。

$@ 命令列每乙個引數。

$?最後一次命令執行的判據,返回值為0則成功執行。

$$ 當前程序號。

$! 後台執行的最後乙個命令。

讀取輸入引數模組:read -p輸出乙個輸入提示 -t等待使用者輸入時長上限 -n只接受長度為n的字元 -s隱藏輸入字元。

數值型引數

將引數申明為數值型引數命令:declare -i設定為數值型 +i取消數值型設定 引數名。除了命令,還可在賦值時直接使用符號「引數=(()

)」和「

引數

=(( ))」和「引數=

(())」和

「引數=

[ ]「能將引數設為數值型。

變數置換方式有些複雜,一般用不上,故擱置。

linux啟動/關機需要一系列公共配置區,其使用順序越靠後的公共配置區的相同檔案決定了該檔案內引數的實際數值,比如時間。不必掌握,故擱置。

正規表示式

作用是匹配檔案中合適的字串,只能在包含匹配中使用,如grep、awk和sed… 擷取

cut命令能將檔案中含某字元段的數行的第1,3列以:為間隔摘出來:cat 檔名 | grep 某欄位 | grep -v root | cut -d 「:」 -f 1,3。但是cut只支援tab和:分隔。

print 『%ns輸出n個字元 %ni輸出n個數字 % m.ni輸出整數m位.小數n位的浮點數(如%3.2i=123.21…)』 $cat(檔名)。

注意print不需要\n換行,但printf在』 』結尾要加\n才能換行。

awk命令只支援tab和space間隔,格式:awk 『條件1條件2…』 檔名。可以對檔案連續進行一些列操作。

eg:#df -h | grep sda5 | awk 『』 | cut -d 「%」 -f 1。意為在分割槽資訊介面的sda5行,輸出第五列,然後再刪掉%間隔後輸出第五列的第一列(也就是第五列本身)。如果要讀其它分割號,則必須在條件1輸入「begin」,即可讀取:間隔檔案。

sed命令可以在擷取的同時對檔案進行修改。命令:#sed -n只將sed的處理行輸出 -i將sed修改儲存至原檔案 『動作 a\追加 c\替換 i\插入 d刪除 p行』 檔名。eg:#sed -i 『2a hello』 file。在file的第二行後追加hello。

排序(只練需要的)

命令:sort -n以數值型排序 -f大小寫不計 按字母順序排序。

統計命令:wc -l只統計行數 -w只統計單詞數 -m只統計字元數。

判斷命令:test -d判斷物件是不是目錄 -e判斷物件存在否 -f判斷物件是不是檔案 -rwx判斷物件的許可權 判斷物件。該命令通常配合邏輯符號使用。eg:test -d /home && echo 「y」 || echo 「no」,意為判斷/home是不是目錄,是則輸出y,否則輸出no。

if迴圈

一般:#if [ 判斷 ];then

程式1else

程式2fi

但是也可用elif實現多分支:

#if [ 判斷1 ];then

程式1elif [ 判斷2 ];then

程式2else

程式3fi

case迴圈

特點是對單目標進行判斷,判斷物件需要用$符號讀取,eg:

#read -p 「please choose yes/no: 「 -t 30 cho

case $cho in

「yes」)

echo 「yes」

;;「no」)

echo 「no」

;;「*」)

echo 「error. please input yes/no」

;;esac

此例為讀取cho,判斷cho內容是yes/no,如果是其它內容則報錯並提醒輸入yes/no。

for迴圈

for迴圈特點是對於判據,每次執行完程式後會重新判斷判據是否達成,在判斷達成後會重複進行程式,直到判據未達成。eg:

#cd /lamp

ls *.tar.gz > ls.log

for i in $(cat ls.log)

dotar -zxf $i &> /dev/null

done

此例為將ls.log中儲存的所有.tar.log包解壓縮到/dev/null中。

while迴圈和until迴圈

直到條件判斷不成立,用法和if類似,暫時不練習。

SQL基礎 基礎語句練習 04

練習內容 報表製作 乙個sql入門 q 做一張報表,顯示出每乙個部門男女員工的比例 select dept name as 部門 count if x.gender m 1,null count as 男員工佔比 count if x.gender f 1,null count as 女員工佔比 注...

Linux基礎 04 許可權

1.檢視檔案的許可權 1 使用ls l命令檢視檔案上所設定的許可權。rw r r 1 root root 605 mar 18 20 28 jp1.tar.gz 許可權資訊 屬主 屬組 檔案大小 建立日期 檔名 2 ls l命令的顯示結果中的第一列分成4組,其中 a 第1個字元為第1組,代表這是乙個...

Linux基礎學習04

man man 選項 命令快捷鍵 作用上箭頭 上移一行 下箭頭下移一行 pgup 向上翻頁 pgdn 向下翻頁 g移動到第一頁 g移動到最後一頁q退出 n當搜尋到字串時,向下搜尋字串 字串 從當前頁向上搜尋字串 字串 從當前頁向下搜尋字串 n與n搜尋方法相反 幫助級別 級別作用1 檢視命令的幫助 2...