日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

linux shell 学习小结

發布時間:2025/3/21 linux 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 linux shell 学习小结 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

學習內容:https://www.linuxdaxue.com/series/linux-shell-series/

個人筆記如下

1、“#!” 是一個約定的標記,它告訴系統這個腳本需要什么解釋器來執行,即使用哪一個Shell來執行。

ex:?

#!/bin/bash echo "Hello World !"

2、chmod +x ./test.sh 使腳本具有執行權限

或者通過chmod 775?./test.sh

或者直接執行bash test.sh

3、交互式輸入通過read

#!/bin/bash echo "What is your name?" read PERSON echo "Hello, $PERSON"

4、Shell將其中任何設置都看做文本字符串。有兩種變量,本地和環境。

定義變量:

注意,變量名和等號之間不能有空格,這可能和你熟悉的所有編程語言都不一樣。同時,變量名的命名須遵循如下規則:

  • 首個字符必須為字母(a-z,A-Z)。
  • 中間不能有空格,可以使用下劃線(_)。
  • 不能使用標點符號。
  • 不能使用bash里的關鍵字(可用help命令查看保留關鍵字)。

使用變量:$變量,使用變量的時候才加美元符($)

使用 readonly 命令可以將變量定義為只讀變量,只讀變量的值不能被改變。

使用 unset 命令可以刪除變量。語法:

unset variable_name

變量被刪除后不能再次使用;unset 命令不能刪除只讀變量。

使用set命令顯示所有本地定義的Shell變量

5、Shell特殊變量,$0, $#, $*, $@, $?, $$

名稱含義
$0當前腳本的文件名
$#傳遞給腳本或函數的參數個數。
$*傳遞給腳本或函數的所有參數。
$@傳遞給腳本或函數的所有參數。被雙引號(" ")包含時,與 $* 稍有不同,下面將會單獨講到。
$?上個命令的退出狀態,或函數的返回值。
$$當前進程的ID。對于 Shell 腳本,就是這些腳本所在的進程ID
$n傳遞給腳本或函數的參數。n 是一個數字,表示第幾個參數。例如,第一個參數是$1,第二個參數是$2

$* 和 $@ 的區別

$* 和 $@ 都表示傳遞給函數或腳本的所有參數,不被雙引號(" ")包含時,都以"$1" "$2" … "$n" 的形式輸出所有參數。

但是當它們被雙引號(" ")包含時,"$*" 會將所有的參數作為一個整體,以"$1 $2 … $n"的形式輸出所有參數;"$@" 會將各個參數分開,以"$1" "$2" … "$n" 的形式輸出所有參數。

6、Shell字符串的操作

加單引號的特點:

  • Shell單引號里的任何字符都會被原樣輸出,單引號字符串中的變量無效;
  • Shell單引號字串中不能出現單引號(對單引號使用轉義符也不行)。

加雙引號的優點:

  • Shell雙引號里可以有變量
  • Shell雙引號里可以出現轉義字符
myweb='CSDN' str="Hello, you are browsing \"$myweb\"! \n" 表達式含義
${#string}$string的長度
${string:position}在$string中, 從位置$position開始提取子串
${string:position:length}在$string中, 從位置$position開始提取長度為$length的子串
${string#substring}從變量$string的開頭, 刪除最短匹配$substring的子串
${string##substring}從變量$string的開頭, 刪除最長匹配$substring的子串
${string%substring}從變量$string的結尾, 刪除最短匹配$substring的子串
${string%%substring}從變量$string的結尾, 刪除最長匹配$substring的子串
${string/substring/replacement}使用$replacement, 來代替第一個匹配的$substring
${string//substring/replacement}使用$replacement, 代替所有匹配的$substring
${string/#substring/replacement}如果$string的前綴匹配$substring, 那么就用$replacement來代替匹配到的$substring
${string/%substring/replacement}如果$string的后綴匹配$substring, 那么就用$replacement來代替匹配到的$substring

shell 字符串下標同python。從0開始編號,

${test##*/},${test%/*} 分別是獲取文件名,或者目錄地址最簡單方法。

字符串的替換

test='c:/windows/boot.ini' echo ${test/\//\\} echo ${test//\//\\}

7、Shell數組

在Shell中,用括號來表示數組,數組元素之間用“空格”分割開。array_name=(value1 ... valuen)

${array_name[index]},使用@ 或 * 可以獲取數組中的所有元素

8、echo命令使用單引號“’”可以保持原樣輸出,不會對內容進行處理

printf使用同C的printf,Shell printf命令與C語言printf命令的區別。

  • printf 命令不用加括號
  • format-string 可以沒有引號,但最好加上,單引號雙引號均可。
  • 參數多于格式控制符(%)時,format-string 可以重用,可以將所有參數都轉換。
  • arguments 使用空格分隔,不用逗號。
printf "%d %s\n" 1 "abc" printf "%s\n" abc def printf "%s %s %s\n" a b c d e f g h i j # 如果沒有 arguments,那么 %s 用NULL代替,%d 用 0 代替 printf "%s and %d \n" # 如果以 %d 的格式來顯示字符串,那么會有警告,提示無效的數字,此時默認置為 0 $ printf "The first program always prints'%s,%d\n'" Hello Shell

?

9、

Shell 有三種 if else格式:

  • if?... then... fi 格式
  • if ... then... else ... fi 格式
  • if ... then... elif ...then?... else ... fi 格式
  • if ... else 語句也可以寫成一行,以命令的方式來運行,像這樣:

    if test $[2*3] -eq $[1+5]; then echo 'The two numbers are equal!'; fi;

    test 命令用于檢查某個條件是否成立,與方括號([ ])類似。

    num1=$[2*3] num2=$[1+5] if test $[num1] -eq $[num2] thenecho 'The two numbers are equal!' elseecho 'The two numbers are not equal!' fi

    ?

    10、

    for 變量 in 列表 docommand1...commandN done

    列表是一組值(數字、字符串等)組成的序列,每個值通過空格分隔。每循環一次,就將列表中的值依序放入指定的變量中,然后重復執行命令區域(在do和done 之間),直到所有元素取盡為止。

    可以顯示當前目錄下的文件

    for file in ./* doecho $file done

    ?

    11、while

    COUNTER=0 while [ $COUNTER -lt 5 ] doCOUNTER=`expr $COUNTER+1`echo $COUNTER done

    lt ---小于

    while read txt1 doecho ${txt1} done < /home/study/study/infile

    說明:這個例子使用read在標準輸入讀取數據,放入變量txt1中,如果讀到的數據非空,就進入循環。然后在循環中把該行數據顯示出來。最后一樣是輸入重定向,將/home/study/study/infile的內容作為此腳本的標準輸入。

    注:>是輸出內容到某個文件,>>是內容追加到文件中,

    命令默認從鍵盤獲得的輸入,重定向(<)后改為從文件,或者其它打開文件以及設備輸入。這樣,本來需要從鍵盤獲取輸入的命令會轉移到文件讀取內容。

    until和while類似,不同在于command 如果返回值為 false,則繼續執行循環體內的語句,否則跳出循環。

    ex:

    COUNTER=0 until [ ! $COUNTER -lt 5 ] doCOUNTER=`expr $COUNTER + 1`echo $COUNTER done

    ?

    12、Shell分支語句case···esac語法

    case 值 in 模式1)command1command2command3;; 模式2)command1command2command3;; *)command1command2command3;; esac

    case后為取值,值后為關鍵字 in,接下來是匹配的各種模式,每一模式最后必須以右括號結束。

    值可以為變量或常數。

    模式支持正則表達式,可以用以下字符:

    * 任意字串 ? 任意字元 [abc] a, b, 或c三字元其中之一 [a-n] 從a到n的任一字元 | 多重選擇

    匹配發現取值符合某一模式后,其間所有命令開始執行直至 ;;。

    ;; 與其他語言中的 break 類似,意思是不執行接下來的語句而是跳到整個 case 語句的最后。

    *)與default相似,如果上面沒有匹配到的模式,則執行*)里的內容。

    ?

    13、Shell Select語句語法

    select name [in list ] do statements that can use $name... done

    說明:select首先會產生list列表中的菜單選項,然后執行下方do…done之間的語句。用戶選擇的菜單項會保存在$name變量中。

    PS3='Please choose your number: ' # 設置提示符字串. echo select number in "one" "two" "three" "four" "five" do echo echo "Your choose is $number." echo break done exit 0

    14、shell function

    Shell 函數的定義格式如下:

    [ function ] funname [()] {command;[return int;] }

    說明:function?關鍵詞是可選項,可加可不加。

    大括號內飾函數體,最后是返回值,可以加【return】關鍵詞來指定函數返回內容,如果不加,將以最后一條命令運行結果,作為返回值。 return后跟數值n(0-255)。

    在Shell中,調用函數時可以向其傳遞參數。

    在函數體內部,通過 $n 的形式來獲取參數的值,例如,$1表示第一個參數,$2表示第二個參數,$0代表腳本本身。

    參數說明
    $#傳遞到腳本的參數個數
    $*以一個單字符串顯示所有向腳本傳遞的參數
    $$腳本運行的當前進程ID號
    $!后臺運行的最后一個進程的ID號
    $@與$*相同,但是使用時加引號,并在引號中返回每個參數。
    $-顯示Shell使用的當前選項,與set命令功能相同。
    $?顯示最后命令的退出狀態。0表示沒有錯誤,其他任何值表明有錯誤。
    function fSum() {echo "入參為:"$1,$2return $(($1+$2)) } fSum 5 7 total=$(fSum 3 2) echo "Return :"$total,$?

    這個定義了一個計算參數和的函數,函數可以通過$1,$2這種形式來獲取入參值,然后通過$(($1+$2))這種形式來將兩值相加,并返回結果。

    調用時,也可以通過括號的形式來調用,Shell會調用單括號里面的命令。 因此,我們可以將shell中函數,看作是定義一個新的命令,它是命令,因此 各個輸入參數直接用 空格分隔。

    注意,$10 不能獲取第十個參數,獲取第十個參數需要${10}。當n>=10時,需要使用${n}來獲取參數。

    15、輸出重定向的詳細說明

    命令格式命令說明
    Command > filename把標準輸出重定向到一個文件中
    Command > filename 2>&1把標準輸出和錯誤一起重定向到一個文件中
    Command 2 > filename把標準錯誤重定向到一個文件中
    Command 2 >> filename把標準輸出重定向到一個文件中(追加)
    Command >> filename2>&1把標準輸出和錯誤一起重定向到一個文件(追加)

    上文中已經說到,Linux文件描述符中,2代表標準錯誤。現在講下如何將標準錯誤進行重定向。

    使用方法:

    command > out.put 2>&1 將command執行的標準輸出和標準錯誤重定向到out.put(也就是說不管command執行正確還是錯誤,輸出都打印到out.put)。

    還可以將錯誤輸出重定向到/dev/null,意思是丟棄這部分輸出,如下:

    command 2> /dev/null 如果command執行出錯,將錯誤的信息重定向到空設備(忽略掉錯誤輸出)

    16、Shell文件包含就是在一個文件調用另外一個文件,使用點號“.”+文件名 或者source+文件名

    ex:

    num1.sh

    num1=1 num2=2

    num2.sh

    . num1.sh echo "num1 = "$num1 echo "num2 = "$num2

    ?

    ?

    ?

    ?

    ?

    總結

    以上是生活随笔為你收集整理的linux shell 学习小结的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。