1. ホーム
  2. スクリプト・コラム
  3. その他

linux シェル学習ノート 3日目

2022-02-07 06:49:51

3日目:条件付き選択

概要

<強い

    応用例分析

    コンディションテスト

    if...else...fi

    ケース...中...エザック

ファンクションメニューの実装 :

スクリプト実行後

1を押して現在時刻を表示する

2を押すとCPU負荷が表示されます

3を押すとメモリ残量が表示されます

0を押してスクリプトを終了

他の文字を押すと、選択終了のプロンプトが表示された後に終了する

分析ステップ

    #日付 +%T

    アップタイム awk インターセプト

    フリー -m

条件付きテスト形式

    #test -option obj

    #[ -option obj ]です。

結果を返す

  1. 式内容テストの結果が真である
  2. 表現内容テストの結果がfalse

テストのオブジェクト分類

    実行結果(実行の成功または失敗)

    ファイル(ファイルが存在するかどうか、など)

    テキスト(整合性が取れているか)

    Numeric(数値比較)

条件付きテスト用オプション

<テーブル <カラー オプション 役割 -d ディレクトリ -e があるかどうか? -f 通常のファイルかどうか -s ファイルサイズが0であるか -r 読み取り可能かどうか -w 書き込み可能か -x 実行ファイルかどうか

論理演算記号

<強い

<テーブル <カラー

オプション

役割

-a

操作で

-o

または操作

!

非操作

インスタンスです。

    #test -e /etc/passwd -a -e /etc/shadow の間に a と操作を入れると、両方が 0 になって 0 になります。

    #test -e /etc/passwd -o -e /etc/groups 真ん中がoかoperationの場合、一方がtrue、もう一方がtrueになる 0

文字列演算子

<強い

    == 2つの文字列が等しい

    ! = 2つの文字列は等しくない

    -z 空文字列

    -n 空でない文字列

インスタンスです。

    #test -z $LOGNAME

    #echo $LOGNAME

    #echo $?

数値比較演算子

<強い

<テーブル <カラー

<スパン シンボルマーク

<スパン 説明

-eq

が等しい

-ネ

とは等しくない

-gt

より大きい

-lt

未満

-年齢

が大きいか等しい

-レ

以下であること

if...else...fi条件選択

    if制御構造の基本フォーマット。

        if 条件 # 判定開始はコマンドでもテスト文でも可

        then #条件が真であれば、逆が真であれば実行 0

            コマンド1 #コマンド1を実行する

        else #条件がfalseの場合に実行 Inverse false 1

            コマンド 2 #コマンド 2 を実行する

        fi #judge終了

インスタンス(if...else...fi) 1

    inputtest.sh

    #! /bin

    #入力テスト

    echo -n "あなたの名前を入力してください:"。

    名前を読む

    #did the user just hit return

    if [ "${name}" == "" ]。

    では

        echo "何も入力されていません"

    さもなければ

        echo "あなたの名前: ${name}"

    フィ

インスタンス(if...else...fi)2

filecopy.sh

#! /bin

#ファイルコピー

if cp /etc/passwd passwd.bak 2>/dev/null 2>/dev/null エラーメッセージを削除します。

では

    echo "グッドコピー!"

その他

    echo "`basename $0`: error,could not copy"

フィ

ネストされた if...else...fi (2段階のネスト)

<強い

if condition1;then

        if 条件 2;then

            コマンド 1

        その他

            コマンド 2

    その他

        if 条件 3;then

            コマンド 3

        その他

            コマンド 4

    フィ

case...in...esac 条件選択 (より柔軟な方法)

    case文は主に、より分岐の多い判定を行うために使用されます

    のケース形式を使用します。(複数のパターン、変数と等しいパターンのみにマッチ)

        のケース変数

            モード1)コマンド1...;。

            mode2) command2...;。

        イーサック

    マッチングパターン

* 任意の文字にマッチ

?        任意の1文字にマッチ

[文字の範囲にマッチします

ケース...in.esacインスタンス1

#! /bin

    #ケース選択

    echo -n "1から5までの数字を入力してください:"

NUMを読む

のケース $NUM

        1) echo "あなたは1″ ;を選択します。

        2) echo "あなたは2″を選択します ;;

        3) echo "あなたは3″を選択します ;;

        4) echo "あなたは4″を選択します ;;

        5) echo "あなたは5″を選択します ;;

        *) echo "ベースネーム $This is not between 1 and 5″.

    イーサック

ケース...in.esacインスタンス2

トピックは:学生のテストのスコアは0から100であり、85以上であなたは最高です!、70から84であなたが良いマークを得ることを示すプロンプトに!、。

#! /bin

echo -n "マークを入力してください:"

マークを読み取る

のケース $mark

    100|9[0-9]|8[5-9]) echo "あなたは最高です!";; 100, 90-99, 85-89

    8[0-4]|7[0-9]) echo "あなたは良いマークを得る!";80-84, 70-79

    7[0-4]|6[0-9]) echo "来い!";; 70-74, 60-69

    [0-5][0-9]) echo "しっかり勉強しなきゃ!";; 00-59

イーサック

今日の問題を解決する

<強い

    入力変数にはif...else...fiを使用します。

    判定の各枝で対応するステートメントを実行する。

menu.sh

    #! /bin

    クリア

    echo "-------menu- -----"

    echo "1) Show Time"

    echo "2)CPU負荷"

    echo "3) Memory free"

    echo "0) 終了"

    echo "-------- --------"

    echo -n "選択した文字を入力してください[0-3]:"。

    リードNUM

    if [ ${NUM} -lt 0 -o ${NUM} -gt 3 ]。

    では

        echo "これは0-3.quotの間ではない。

    さもなくば

        if [ "${NUM}" == "1" ]。

        では

            echo "`date +%T`"

        さもなくば

            if [ "${NUM}" == "2" ]。

        では

            echo "`uptime | awk -F '[,:]' '{print $7}'`"

            さもなくば

            if [ "${NUM}" == "3" ]。

            では

            echo "`free -m | awk '$1=="Mem:"{print $4}'`"

            さもなくば

                出口

            フィ

        フィ

        フィ

    フィ

このセッションでは、レビューします。

    条件付きテストの種類

        ファイルテスト

        テキストテスト

        数値テスト

        ロジックテスト

if...else...fi条件選択構造

    ケース・イン・ESAC

授業終了後のテスト

1. menu.shを修正して、メニュー以外のパラメータ渡しの選択方法を使用するようにします。例えば #. /menu.sh 1 出力時間

2. このメニュー選択方法を実装するためにcaseメソッドを使用する

スドゥの答え (必然的に間違いがありますが、うまく実装できます)

1. menu.shを修正後、以下のようになります。

    #! /bin/bash        

if [ $1 -lt 0 -o $1 -gt 3 ]。

では

        echo "これは0-3.quotの間ではないです。

さもなければ

        if [ "$1" == "1" ]。

        では

            echo "`date +%T`"

        さもなければ

            if [ "$1" == "2" ]。

            では

                echo "`アップタイム|awk -F '[,:]' '{print $7}'`"

            さもなくば

                if [ "$1" == "3" ]。

                では

            echo "`free -m | awk '$1=="Mem:"{print $4}'`"

            さもなければ

                出口

            フィ

        フィ

        フィ

フィ

2. #! /bin

クリア

echo "-------menu- -----"

echo "1)時間を表示する"

echo "2)CPU負荷"

echo "3) メモリの空き容量"

echo "0) 終了"

echo "-------- --------"

echo -n "選択した文字を入力してください[0-3]:"

NUMを読む

のケース $NUM

        1) 日付 +%T;;

        2) uptime | awk -F '[,:]' '{print $7}';;

        3) free -m | awk '$1=="Mem:"{print $4}';;

        0) 終了 ;;

        *) echo "これは0-3.quot;の間ではない;;

イーサック

今日の方がまだやりがいがあります。30分のチュートリアルを見てほぼ3時間。

if...else...fiの方がわかりやすいけど、caseの方が使いやすい気がするなぁ。

1日にチュートリアルの1セクションを見るだけで十分なようです。See more 頭もくらくらします。って感じですね。引き続き学習してください〜。