Shell基礎(六):位置參數及case分支

位置參數

標記

$0:腳本文件絕對路勁
$1-9:小於10位置參數標記
${10..}:大於10的位置參數標記
$#:參數總數
$*:展開成一個從 1 開始的位置參數列表。當它被用雙引號引
   起來的時候,展開成一個由雙引號引起來的字符串,包含了
   所有的位置參數,每個位置參數由 shell 變量 IFS 的第一個
   字符(默認爲一個空格)分隔開。
$@:展開成一個從 1 開始的位置參數列表。當它被用雙引號引
   起來的時候,它把每一個位置參數展開成一個由雙引號引起
   來的分開的字符串。

shift:多參數列表逐一訪問

用法
每次 shift 命令執行的時候,變量 $2 的值會移動到變量 $1 中,
變量 $3 的值會移動到變量$2 中,依次類推。變量 $# 的值也會相應的減 1
舉例
#!/bin/bash
# posit-param2: script to display all arguments
count=1
while [[ $# -gt 0 ]]; do
    echo "Argument $count = $1"
    count=$((count + 1))
    shift
done

case分支

基本語法
case word in
    [pattern [| pattern]...) commands ;;]...
esac
模式匹配 pattern

這裏寫圖片描述

舉例
#!/bin/bash
read -p "enter word > "
case $REPLY in
    a|A) echo "is a or A." ;;
    [[:alpha:]]) echo "is a single alphabetic character." ;;
    [ABC][0-9]) echo "is A, B, or C followed by a digit." ;;
    ???) echo "is three characters long." ;;
    *.txt) echo "is a word ending in '.txt'" ;;
    *) echo "is something else." ;;
esac
匹配多個測試條件
#!/bin/bash
# case4-2: test a character
read -n 1 -p "Type a character > "
# ;;& 用於匹配多個測試條件,匹配到一個後繼續匹配下一個而不是直接退出。
case $REPLY in
    [[:upper:]]) echo "'$REPLY' is upper case." ;;&
    [[:lower:]]) echo "'$REPLY' is lower case." ;;&
    [[:alpha:]]) echo "'$REPLY' is alphabetic." ;;&
    [[:digit:]]) echo "'$REPLY' is a digit." ;;&
    [[:graph:]]) echo "'$REPLY' is a visible character." ;;&
    [[:punct:]]) echo "'$REPLY' is a punctuation symbol." ;;&
    [[:space:]]) echo "'$REPLY' is a whitespace character." ;;&
    [[:xdigit:]]) echo "'$REPLY' is a hexadecimal digit." ;;&
esac
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章