linuxシェル学習記の最終章、古いものを温め、新しいものを知る
スクリプトのヒント
スクリプトファイル名の命名規則
ファイル名に含まれる文字
文字、数字、". "、"_"、"-"、注意:スクリプトファイル名は数字で始めることはできません。
スクリプトファイル名には、英単語やフレーズ、短い文章の略語を使うようにしましょう。
スクリプトのバージョン管理
スクリプトの役割. マスターバージョン番号. 修正回数. シェルタイプ
変数の命名規則
変数名は数字とアルファベットで構成することができる
変数名はすべて小文字の英字で表記する
変数名には可能な限り略語を使用し、できれば6文字以内とします。
変数名} 例: ${port},${ipaddr}...
スクリプトコードコメント指定
スクリプトコードのコメントには "#" と ";(semicolon)" の両方を使用することができます。# は一般に、コードが何をするか、どのように使用されるかを説明するための説明的なコメントによるものです。
そして、;は通常、例のコメントに使われます。特に、設定ファイルの一部でよく使われるので、スクリプトのコメントもこの2つの方法に従います。
引用符の使用に関する仕様
一重引用符の使用は控えめに
非常に特殊な文字の場合、特殊な意味を持たせるために「バックスラッシュ」を使用します。
引用符で囲まれた文字をマスキングする場合、特殊記号そのものが印刷されない限り、一般に一重引用符の内側には他の引用符は適用されません。
シェルコマンドの実行にバッククォートを使用する場合、一般にバッククォートの中に他のクォーテーションを付加します。
スクリプト関数定義指定
変数名は数字とアルファベットで構成することができる
ハンプ・ネーミングを使用する(2番目の単語から始め、各単語の最初の文字を大文字にする)。
知名度が高い場合を除き、名前に略称を使わないようにする
名前は2つまたは3つの単語で構成することができますが、通常は3つまでとします。
1日目のコース終了後の課題
1. grep "20081011" text.txt でこの日のデータを取得する。
2. grep "200804" text.txt この月のデータを取り出します。
3. grep "200806" text.txt | grep -v "-" 1ヶ月分の上昇データを取得する。
4. grep "200807" text.txt | grep -v "-" | wc -l アップしている日数を統計値で一覧表示する。
5. grep "200808" text.txt | sort -k5 -n | tail -1 でアップ日数を決定し、tail で最終行を取得する。
grep "200808" text.txt | sort -k5 -r |head -1 で上昇を判断し、head が最初の行を取得する。
6. grep "200810" text.txt | awk '{if($4>0){print $1,$5}}' 上昇データの時刻と上昇率を1月に取り出す
7. grep "200811" text.txt | awk '{if($4>5 && $4<20){print $0}}'. 行全体を取り出す間隔を決定する
スクリプトコード例解析1
スクリプトを実行し、以下のアドレスに自動的にpingを打つシェルスクリプトを作成します。
192.168.1.1,192.168.1.31
上記のIPアドレスは、スクリプトに直接書き込まれています。実行が完了すると
には、Ping送信可能なIPアドレスと不可能なIPアドレスが表示されるはずです。
#! /bin/bash
if ping 192.168.1.1 -c 1
では
echo "192.168.1.1 online"
さもなければ
echo "192.168.1.1 offline"
フィ
if ping 192.168.1.31 -c 1
では
echo "192.168.1.31 online"
さもなければ
echo "192.168.1.31 offline"
フィ
スクリプトコード解析例2
解析1を修正し、IPをiplist.txtから読み込む。
#! /bin/bash
for ip in `cat iplist.txt`.
する
if ping $ip -c 1
では
echo "${ip} online"
さもなくば
echo "${ip} offline"
フィ
完了
スクリプトコード例解析3
解析2を修正し、無駄な情報を削除
#! /bin/bash
for ip in `cat iplist.txt`.
する
if ping $ip -c 1 >/dev/null 2>&1
では
echo "${ip} online"
さもなくば
echo "${ip} offline"
フィ
完了
スクリプトコード解析例4
レコードを生成するために解析3を修正する
#! /bin/bash
>hoststatus.txt
for ip in `cat iplist.txt`.
する
if ping $ip -c 1 >/dev/null 2>&1
では
echo "${ip}オンライン" |tee -a hoststatus.txt
さもなければ
echo "${ip} offline" |tee -a hoststatus.txt
フィ
完了
スクリプトコード解析例5
IPアドレスのプールを生成し、255個のIPを生成し、マルチスレッドPingを実装するために解析4を修正する。
#! /bin/bash
iplist
for ip in `seq 1 255`.
する
echo "192.168.1.${ip}">>iplist(アイプリスト)
完了
#! /bin/bash
>hoststatus.txt
テンポラリ
fastping()
{
if ping ${1} -c 1 >/dev/null 2>&1
では
echo "${ip}オンライン" |tee -a temp
さもなければ
echo "${ip} offline" |tee -a temp
フィ
}
for ip in `cat iplist.txt`.
する
fastping $ip &
完了
待つ
sort -t. -k4 -n temp >hoststatus.txt
rm temp
temp . /ping.sh スクリプトの実行時間をテストします。
関連
-
スプレッドシートに匹敵するオンライングリッドシステム。EditGrid
-
[解決済み] 式は変更可能なlvalueでなければならない
-
[解決済み] libc++abi.dylib: NSException 型のキャッチされない例外で終了する (lldb)
-
[解決済み】C++ Cout & Cin & System "Ambiguous" [クローズド]。
-
[解決済み】C++の<map>に相当するC#は何ですか?[重複しています]
-
[解決済み】「名前空間はフィールドやメソッドなどのメンバーを直接含むことはできない」 [閉店]のお知らせ]
-
[解決済み】dyld: ライブラリがロードされない ... 理由: 画像が見つからない
-
[解決済み】異なるサイズの整数からポインタにキャストする、pthreadコード
-
[解決済み】エラー: 'const ...' を '...' の 'this' 引数として渡すと、修飾子が破棄される
-
[解決済み】VC++の致命的なエラーLNK1168: 書き込み用のファイル名.exeを開けない
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】主成分分析:colMeans(x, na.rm = TRUE)のエラー:'x'は数値でなければなりません。
-
[解決済み】なぜ「Pickle - EOFError.」が発生するのでしょうか?空のファイルを読むと「Ran out of input」と表示されるのはなぜですか?
-
[解決済み] 'push_back' の呼び出しに対応するメンバ関数がないエラー
-
[解決済み] [Solved] libpthread.so.0: error adding symbols: コマンドラインからDSOが見つからない
-
[解決済み】エラー「C++はメソッド定義中のすべての宣言に型指定子を必要とする」。
-
[解決済み] Django - そのようなテーブルがない例外
-
[解決済み] .gitignoreと "以下の未追跡の作業ツリーファイルはチェックアウトで上書きされます"
-
[解決済み] realloc(): char *のstrcatのためのスペースを作るために再割り当てするとき、次のサイズが無効です [重複].
-
[解決済み] テスト
-
[解決済み】Android "ビュー階層を作成した元のスレッドだけが、そのビューに触れることができる"