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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Shell程序设计 | 基本语法 :变量、I/O、算术运算、条件判断、流程控制、函数

發布時間:2024/4/11 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Shell程序设计 | 基本语法 :变量、I/O、算术运算、条件判断、流程控制、函数 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

  • 變量
    • 環境變量
    • 位置變量
    • 特殊變量
    • 自定義變量
    • 數組
  • I/O
    • printf / echo
    • read
  • 算術運算
    • let
    • expr
  • 條件判斷
    • test
    • 常用判斷條件
  • 流程控制
    • if
    • case
    • for
    • while
    • until
  • 函數
    • 系統函數
    • 自定義函數


變量

環境變量

環境變量用于初始化shell的啟動環境,是系統定義的變量。

常用的環境變量有下面幾種

可以使用env命令來查看所有的環境變量,也可以直接echo查看某個環境變量的值

位置變量

我們可以使用shift命令來將參數左移,語法如下

shift 表示移動的位數

每次左移一位

#!/bin/bashecho $@ shift 1 echo $@ shift 1 echo $@ shift 1 echo $@

特殊變量

$n :表示輸入的第n個參數,當超過十的時候需要用大括號括起來,如${10}
$# :獲取輸入參數的個數
$? :獲取上一條命令的執行狀態,如果為0則說明執行成功,為1則說明執行失敗。當然也可以用于獲取函數返回值
$$ :獲取當前進程的pid
$@ :代表當前命令行中所有的參數,不過它會把每個參數區分對待
$* :代表當前命令行中所有的參數,不過它會把所有參數當成一個整體

自定義變量

定義變量的方式很簡單,只需要給它賦值進行,并且不需要指明類型

變量名=

當需要刪除變量的時候,可以使用unset命令

unset 變量名

如果想要聲明常量,可以使用readonly關鍵字,但是需要注意,常量不可被unset

readonly 變量名

我們還可以通過export命令將局部變量升級為環境變量

export 變量名

注意事項

  • 等號兩邊不能有空格
  • 如果變量名中存在空格時需要以單引號或者雙引號括起來,否則會被當成命令
  • bash中變量會被默認視為字符串類型,無法直接進行算數運算

數組

定義數組

數組名=( 元素1 元素2 元素3 ...... ) # 元素前后以空格為間隔

顯示數組的所有元素

echo ${數組名[@]}

顯示數組的元素個數

echo ${#數組名[@]}

顯示數組的第i個元素

echo ${數組名[i]}

例如
將參數作為數組元素,查看數組中的內容

#!/bin/basharr=( $@ )echo ${arr[@]} echo ${#arr[@]} echo ${arr[5]}


I/O

printf / echo

shell中的輸出命令有printf和echo兩種,printf是從C語言中模仿而來,所以它可以指定類型、對其方式等屬性。

echo 輸出 printf 輸出

同時echo輸出時會自帶換行,而printf則需要自己手動加入\n

read

read用于從終端獲取輸入
語法如下

read (選項)(參數) -p:指定讀取值時的提示符; -t:指定讀取值時等待的時間(秒)。

實例:從終端獲取一個值并輸出

#!/bin/bashread -p "請輸入參數:" str echo $str


算術運算

shell中存在兩種算術運算的命令,分別是let和expr

let

let的語法如下

let 變量名=let 變量名=變量名+值

需要注意的是,當有變量加入運算的時候不需要在變量前面加$
通常為了簡便,我們也會使用兩個圓括號let

((算術式)) # 不需要空格

我們通常以以下兩種方式來獲取計算結果

$((運算式)) 或 $[運算式]

expr

expr用來計算表達式,每一個運算符之間要有空格,并且當有變量加入時需要加上$

expr + , - , \*, /, %

條件判斷

test

在shell中我們通常利用test來進行條件判斷,當結果為真時返回0,失敗時返回1

語法如下:

test 判斷內容

不過我們通常都會以方括號的形式進行簡寫,如下

[ 判斷條件 ] # 需要注意的是條件前后需要有空格

常用判斷條件

  • 判空
  • -n :非空(nonzero)
    -z :為空(zero)

  • 字符串之間比較
  • = :字符串相同 ??????????!= :字符串不同

  • 整數之間比較
  • -eq :等于(equal)?????????????? -ne :不等于(Not equal)
    -lt :小于(less than) ?????????? -le :小于等于(less equal)
    -gt :大于(greater than)??????-ge :大于等于(greater equal)

  • 判斷文件權限
  • -r :有讀的權限(read)
    -w :有寫的權限(write)
    -x :有執行的權限(execute)

  • 判斷文件類型
  • -f :文件存在并且是一個常規的文件(file)
    -e :文件存在(existence)
    -d :文件存在并是一個目錄(directory)


    流程控制

    if

    if用于進行邏輯判斷,語法格式如下

    if test 條件 # 或者使用[ 條件 ]then # 執行的命令 elif test 條件 # 進行其他的分支判斷then # 執行的命令 else # 剩余的情況# 執行的命令 fi

    例如判斷輸入的數字是否大于十

    #!/bin/basha=$1if [ $a -lt 10 ]then echo "less than 10" elif [ $a -gt 10 ]then echo "greater than 10" elseecho "equal than 10" fi


    case

    case用于進行分支選擇,語法格式如下

    case $變量名 in"值A")# 執行分支A;;"值B")# 執行分支B;;"值C")# 執行執行分支C;;*)# 如果不為以上值,則執行缺省分支;; esac

    注意事項

    • case行必須以in結尾,每個值必須要用雙引號包含,并以右括號結束
    • ;;代表分支的結束,類似于C中的break
    • *)代表缺省模式,類似于C中的default

    例如以下使用情況

    #!/bin/basha=$1 case $a in"1")echo "11111111111";;"2")echo "22222222222";;"3")echo "33333333333";;*)echo "default";; esac


    shell中的循環控制主要有for,while,until三種

    for

    shell中的for循環有兩種語法,一種是我們傳統的C語言for,另一種則類似C++中的范圍for

    # 語法1 for ((初始值; 循環條件; 變量變化))do# 執行命令done# 語法2 for 變量 in 數組或者區間do# 執行命令done

    分別進行演示

    計算1到100的累加和

    #!/bin/bashi=0 sum=0 for ((i=0; i<=100; i++))dosum=$[$sum+$i]doneecho $sum


    計算輸入的參數之和

    #!/bin/bashsum=0 for i in $@dosum=$[$sum+$i]doneecho $sum


    while

    while的邏輯是當判斷條件為真時執行循環

    語法如下

    #!/bin/bashwhile [ 判斷條件為真則執行 ]do# 執行命令done

    until

    until與while剛好相反,如果判斷條件為假,則until繼續執行

    語法如下

    #!/bin/bashuntil [ 判斷條件為假則執行 ]do# 執行命令done

    函數

    系統函數

    系統自建的函數庫在路徑 /etc/init.d/functions
    常用的主要有basenamedirname兩種,用于解析文件的路徑

    basename通常用于獲取文件名,它會找到最后一個/的位置,并刪除前面所有字符

    basename 文件路徑 [可選: 刪除的字符]

    例如

    dirname主要用于獲取路徑名,它會去掉文件名,然后返回剩余的部分

    dirname 文件路徑

    自定義函數

    shell中也允許自定義函數,語法如下

    function 函數名() #括號中不能填任何東西 {# 執行命令# 返回值 }

    注意事項

    • 括號中不能填任何參數,傳參可以直接通過 $變量名的形式傳遞,返回值可以使用特殊變量 $? 獲取。如果沒有聲明返回值,則以函數最后一條命令的結果作為返回值
    • shell腳本是逐行運行的,所以必須先聲明函數才能調用

    獲取兩個數相加的結果

    function add() {echo $[$1+$2] }read -p "請輸入參數A: " a read -p "請輸入參數B: " badd $a $b

    總結

    以上是生活随笔為你收集整理的Shell程序设计 | 基本语法 :变量、I/O、算术运算、条件判断、流程控制、函数的全部內容,希望文章能夠幫你解決所遇到的問題。

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