linux シェル学習ノート 3日目
3日目:条件付き選択
概要
<強い
応用例分析
コンディションテスト
if...else...fi
ケース...中...エザック
ファンクションメニューの実装 :
スクリプト実行後
1を押して現在時刻を表示する
2を押すとCPU負荷が表示されます
3を押すとメモリ残量が表示されます
0を押してスクリプトを終了
他の文字を押すと、選択終了のプロンプトが表示された後に終了する
分析ステップ
#日付 +%T
アップタイム awk インターセプト
フリー -m
条件付きテスト形式
#test -option obj
#[ -option obj ]です。
結果を返す
-
式内容テストの結果が真である
-
表現内容テストの結果がfalse
テストのオブジェクト分類
実行結果(実行の成功または失敗)
ファイル(ファイルが存在するかどうか、など)
テキスト(整合性が取れているか)
Numeric(数値比較)
条件付きテスト用オプション
論理演算記号
<強い
オプション
役割-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 頭もくらくらします。って感じですね。引き続き学習してください〜。
関連
-
非常に詳細な2つのシェルコードの例
-
パスワード入力を非表示にする InstallShield スクリプト
-
[解決済み】Heroku + node.jsのエラー(Webプロセスが起動後60秒以内に$PORTにバインドできなかった)。
-
[解決済み] エラー: '...'のメンバー '...'が非クラス型である場合のリクエスト
-
[解決済み] gcloudコマンドが見つからない - Google Cloud SDKのインストール時
-
[解決済み】集約する数値型がない - groupby()の挙動が変わった?
-
[解決済み] Layout の割り当て時にエラーが発生しました。BoxLayout は共有できない
-
[解決済み】エラー:lvalueは単項演算子として必要です。
-
linux シェル学習ノート 1日目
-
LAN設定用自動設定スクリプトファイルの書き方・使い方
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】C++の<map>に相当するC#は何ですか?[重複しています]
-
[解決済み】なぜ「Pickle - EOFError.」が発生するのでしょうか?空のファイルを読むと「Ran out of input」と表示されるのはなぜですか?
-
[解決済み】Looper.prepare()を呼び出していないスレッド内でハンドラを作成できない。)
-
[解決済み】C 言語のポインタと配列。[警告] 整数からキャストなしでポインタを作る代入 [クローズド]
-
[解決済み】fatal error: Python.h: そのようなファイルやディレクトリはありません
-
[解決済み】PHP 接続に失敗しました。SQLSTATE[HY000] [2002] 接続が拒否されました。
-
[解決済み】fatal error: Python.h: そのようなファイルやディレクトリはありません
-
[解決済み】Javascript Uncaught TypeError: 未定義のプロパティ'0'を読み取れない
-
[解決済み] strcmpがセグメンテーションフォールトを出す [重複]。
-
CMakeLists.txt 構文の紹介と例のウォークスルー