第1章変数定義シェルシェルシェル変数の代入変数の概要2. 3. 4.シェルシェル変数置換5.変数演算変数シェルケース
- シェル変数の概要
- 変数とは何か
、固定されていないコンテンツを表すために、固定文字列を使用して、後続の参照を容易にするために:変数は、簡単に理解するためにデータシェルを送信する方法です。
2. VARIABLEコマンド仕様
変数名は、要件定義されている場合:文字、数字、いくつかのコンポーネントを強調し、文字で開始しようとし、最良の変数名は、いくつかの意味を持ちます。
IP = 10.0.0.100
IP1 = 10.0.0.100
Hostname_Ip = 10.0.0.100
hostname_IP = 10.0.0.100
等号は、代入、ノートです:変数の定義が続く等号の両側にはスペースは、システムコマンドと競合しません。
- シェル変数定義された方法
01)ユーザー定義変数:変数名が人為的に定義されました。
02)システム環境変数:システム動作しており、環境関連データを保存します。
03)Locationパラメータ変数は:スクリプトのパラメータの受け渡しを行うために、変数名は、変数効果が固定されており、カスタマイズすることができません。
04)あらかじめ定義された変数:バッシュが既に変数を定義し、変数名は、変数効果が固定され、カスタマイズすることができません。
- シェル変数定義の練習
01.例示的なユーザ定義変数、現在アクティブなシェル
#1は、変数、変数名=変数の値を定義します。表示されません - 「Henggang」コマンド[ルート@ qiudao〜]#qiudao =「ハローシェル」#は、変数のスペースを定義するときは、引用符を使用する必要があります。
#2。リファレンス変数、$変数または$ {変数名} [ルート@ RLB〜]#エコー$ RLBハローシェル[ルート@ qiudao〜]#エコー$ rlb_test
[ルート@ qiudaoは〜]#は、$ _testハローshell_testをエコー
#3ウォッチ変数、ディスプレイにカスタム変数と環境変数を含むすべての変数を設定[RLB @ルート#SET] | grepのRLB HOSTNAME = RLB RLB = 'こんにちはシェル' [RLB @ルート ]#件のenv | grepのRLB番号のみ表示システム環境変数HOSTNAME = RLB
現在のシェルでのみ有効:#4は、変数のスコープをキャンセルします。[ルート@ RLB〜]#解除RLB [ルート@ RLB〜]#セット|グレップのqiudaoのHOSTNAME = RLB
#5。注意事项、引用变量时注意事项、单双引号和不加引号的区别。[ルート@ RLB〜]#するvar = $(ホスト名)[ルート@ RLB〜]#エコー$するvar qiudao [RLB @ルート〜]#するvar = "$(ホスト名)" [ルート@ RLB〜]#エコー$ VARのRLB [ルート@ RLB〜]#のVAR = '$(ホスト名)' [ルートRLB〜@]#エコー$変数$(ホスト名)[ルート@のRLB〜]#エコー "の$ VAR" $(ホスト名)[ルート@ RLB〜]#エコー '$のVAR' $のVAR [ルート@ RLB〜]#名= qiudao [ルートRLB〜@]#エコー$ qiudao名[ルート@ RLB〜]#は$名前お金をエコー$ 10000000000 RLBのお金が0000000000 [ルート@のRLBは〜]#がエコーされRLBお金が0000000000である[ルート@ RLB〜]#エコー「$名のお金 "$名のお金を$ 10000000000です" $ 10000000000' である$名前お金は$ 10000000000 [ルート@ RLB〜]#は、$名のお金は$ 10000000000 RLBのお金はお金は$ 10000000000ですqiudao#エコー$ 10000000000 [ルート@のRLB〜] "$名のお金は$ 10000000000である" されているエコー[ルート@のRLB〜]されます#エコー「$名のお金は$ 10000000000です」$名のお金は$ 10000000000 [ルート@のRLBは〜]#は、$名のお金をエコーされる '$ 10000000000' RLB金は$ 10000000000です
概要:#のWYSIWYG単一引用符は、何を、そのまま出力吐き出すものを食べます。スペースが全体としてカウントされていない場合は、$ $() ``と同様の引用符と二重引用符#なし:単一引用符で#二重引用符は同様に、特殊記号は(ランニング)解決されます。コマンド内の抗引用符の#バッククォート最初の実装は、結果の実装が表示さ。
- 現在のサブでの効果的な典型的なシステム環境変数、およびシェルシェル
#1は、環境変数は、カスタム変数に変換され、環境変数:.エクスポート変数を定義します。#エコー$名RLB [ルートRLB〜@]#猫test.sh#!#のSh test.sh番号[RLB〜@ルート]スクリプトのbin / bashのエコー$名[RLB〜@ルート]を実行し、別のものを呼び出します。 bashは、$名未満のアクセス値を実行します。
[ルート@ RLB〜]#[ルートRLB〜@]#輸出名= qiudao#変数環境変数[RLB〜@ルート]を変換する#shのtest.sh#RLBもう一度スクリプトを実行
#注:現在の環境内のすべてのユーザーに影響を取ることができ、輸出を使用してください。輸出は、すべてのユーザーのための恒久的な変数の書き込みは/ etc / bashrcには、定義します。Exprotは、可変書き込み.bashrcに、ユーザーにのみ永続的な効果を定義します。
#2は#猫env.shの#/ binに/ bashのエコー「ユーザのホームディレクトリ:$ホーム」[RLB〜@ルート]システム環境変数を使用して定義されています!エコーは、「現在のホスト名です:$ホスト名」エコー」現在のディレクトリ:$ PWDの「エコー」は現在、サーバーのアドレスとポートに接続されたことは、次のとおりです。$ SSH_CONNECTION "
[ルート@ RLB〜]#shをするenv.shのユーザのホームディレクトリ:RLB、現在のディレクトリ:/ルート現在の接続アドレスとポートサーバが使用している:10.0.0.1 62881 10.0.0.98 22 /ルートは、現在のホスト名です。
- 例示的な事前定義された可変パラメータ、方法変数を使用して構築されたシステム。
#1のスクリプトは次のよう:
#!/ binに/ bashのエコー「#現在のファイル名のシェルスクリプト:$ 0」エコー「シェルスクリプトの#位置パラメータ:$ 1」エコー「2シェルスクリプトの位置パラメータの#:$ 2」3のエコー「#シェルスクリプトの位置パラメータ:$ 3「エコー」#渡されたすべての位置パラメータです:$ *「エコー」#渡されたすべての位置パラメータは以下のとおりです。パラメータ#の合計が合格の「エコー」の数@ $です:$#「エコー」# PIDは、現在実行されている:$$「エコー」#上のコマンドの実行結果を返します:「$を?
次のように#2の実行結果は以下のとおりです。
[ルート@ RLB〜]#件のSH variable.sh Linuxのパイソンのmysql#現在のファイル名のシェルスクリプト:variable.sh#1、シェルスクリプトの位置パラメータ:Linuxの#の第二のシェルスクリプトの位置パラメータ:Pythonの#3位シェルスクリプトの位置パラメータ:MySQLの#渡されたすべての位置パラメータは、次のとおり、すべての位置パラメータが渡されるのLinux PythonのMySQLの#:パラメータの数は、Linux PythonのMySQLの#総送達がある:現在のプログラムが実行されているPID 3#:25285#のコマンド実行結果を返します:0
#3。なお、\(*と\)との違い@
可以看到不加引号时,二者都是返回传入的参数,但加了引号后
$*把参数作为一个字符串整体(单字符串)返回,
$@把每个参数作为一个一个字符串返回
#テストスクリプトを次のように:
[ルート@ qiudao〜]#猫test.sh#!/ binに/ bashのテスト(){*コントラストマークを加えた後、$ "でNのための$ *エコー$ @をエコーエコー」" "同じ両方、引用符で囲まれていない" エコー「私が行って$ Nをエコーありません
123 456 789テスト} $ Nが行わエコーん "の$ @" にNのために "----------" エコー
次のように#の実行結果は以下のとおりです。
[ルート@ qiudao〜]#件のsh test.sh引用符で囲まれていない、彼らは同じです
123 456,789,123,456,789後の比較では、引用符を追加します。
123 456 789
123 456 789 04.何位?スクリプトを実行する場合、スクリプト・コンテンツは、背中に書かれた空間によって分離されています。
[ルートRLB〜@]#は/ etc / initのの/etc/init.d/network {|再起動|ステータス| |ストップ力リロード開始}:#1の/etc/init.d/network使い方[RLB〜@ルート]。 D /ネットワークステータス#status位置しても、最初のパラメータ$ 1の場合
他の可変位置:$ 2 $ 9 $ .. {10}
- 追加:コマンド変数に結果を渡します。(コマンド置換)
#システムの時間と印刷時間、今年と来年の時間[RLB〜@ルート]#これは2019年です[ルートRLB〜@]#これは」エコー「これは$(DATE +%Y-)年は」エコー(((\ \)(Y日付+%)+ +1))年の「これは2020年IS
カスタム#変数の計算[ルート@ RLB〜]#年齢= 18 [ルート@ RLB〜]#エコー$年齢18 [ルート@ RLB〜]#は、$(($年齢+ 1))19エコー
#タッチ[RLB〜@ルート]#命令的嵌套使用、使用$($())[ルート@ RLB〜]#1 MKDIR oldboy oldboy / {1..5}の.txt [RLB〜@ルート]#データ= $(タールzcvf oldboy.tar.gz $(/ルート/ oldboy / -name "* .TXT")を見つける)タール:削除先頭の `/」メンバー名[ルート@のRLBは〜]#エコーから$データ/ルート/ oldboy /1.txt /root/oldboy/2.txt /root/oldboy/3.txt /root/oldboy/4.txt /root/oldboy/5.txt
- カスタムシェル変数の代入変数、および組み込み変数システムは、リードコマンドが対話的に使用することができる変数が渡され
01.read例の構文
#サンプルスクリプト:[ルート@のRLB〜/シェル]#猫read1.sh#/ binに/ bashの-p読む "メッセージ:" ヴァールは "あなたが入力した変数である:$のVAR" エコー!
スクリプト[ルート@のRLB〜/シェル]#1のSH read1.shメッセージの#実装:あなたが入力したoldboy変数は次のとおりです。oldboy
02.read例の構文、簡単なバックアップシーン
#サンプルスクリプト:! [ルート@のRLB〜/シェル]#猫read2.sh#/ binに/ bashの-p読み「ディレクトリあなたはバックアップしたいです:」エコーバック「バックアップするディレクトリは以下のとおりです。$戻っ」エコー」 ------------- backupingの$バック--------------- "エコー" -------------バックアップ行わ$バック------------- "
バックアップするスクリプト[ルート@のRLB〜/シェル]#1のSH read2.shディレクトリの#実装されている:あなたはバックアップしたい/データディレクトリです:/データ------------- backuping /データ--------------- -------------バックアップ行わ/データ-------------
- IPを介したユーザ入力かどうかをテストする、例示的なシンタックスを読み取ります
スクリプトを実行すると1)、ヒント:一般的に生還した場合は一般に戻すために失敗していない場合、)IP 3を介してユーザの入力かどうかを検出するには、pingコマンドを使用)、IP 2を入力します。..
#サンプルスクリプト:[ルート@のRLB〜/シェル]#猫read3.sh#/ binに/ bashの#1 IPアドレスを入力するようユーザーに促し、 "検出されるIPアドレスを入力してください:"!-p読みIP#2を使用します。 ?。その後、エコー "; pingコマンドは、最初のコマンドの通信のping -W1 -c1 $ IP&>を/ dev / null RC = $#3のIPアドレスは、ステータスコードが正常に戻った場合は、[$ RC -eq 0]かどうかを確認するかどうかをチェックします$ IPは、「$ IPが正常に通信できない「他エコー」適切Fiを提供して通信することができます
検出されるべき#実行するスクリプト[ルート@のqiudao〜/シェル]#1のSH read3.sh IPアドレスを入力します。223.5.5.5 223.5.5.5正常な通信を
[ルート@のRLB〜/シェル]、検出されるべき#1のsh read3.shは、IPアドレスを入力します。233.5.5.5の233.5.5.5はと通信できません
#echoコマンド出力色。
エコー-e "\ 033 [30メートルブラックワード\ 033 [0メートル" エコー-eエコー-e "033 [0メートル\ \ 033 [32メートル緑色単語" エコー-e "033 [0メートル\ \ 033 [31メートル赤単語"「\ 033 033 \ 033 \ [33メートルの黄色の単語を[0メートル "エコー-e" \ 033 [34メートルブルー語[033 \ 0メートル "エコー-e" \ 033 [35メートル紫色の言葉[0メートル "エコー-e" 033 \ [36メートルのスカイブルー033 \単語[0メートル "エコー-e" \ 033 \ 033 [37メートル白語[0メートル」
!。[ルート@ RLB〜/シェル]#猫read3.sh#/ binに/ bashの#1は、IPアドレスを入力するようユーザーに促し、 "検出されるIPアドレスを入力してください:" -p読む。IP#2 pingコマンドをIPをチェックします?アドレス通信がping -W1 -C1 $ IP&>を/ dev / null RC = $#3 [0 $ RC -eq]ステータスコードがあれば、正常に戻ったかどうかをチェックするためのコマンドを実行するかどうか、そして、エコー-e「\ 033 [32メートル$ IPは0メートル "-eエコー他" [033 \正しく通信できる\ 033 [31メートル$ IPは\ 033 [0メートル「Fi回線と通信できません
検出されるべき[ルート@のRLB〜/シェル]#1のSH read3.sh IPアドレスを入力します。検出されるIPアドレスを入力しread3.sh 223.5.5.5 223.5.5.5通常の通信[ルート@のRLB〜/シェル]#SHを:233.5.5.5 233.5.5.5のは正しく通信できません
- ホスト名を変更するスクリプトを記述するために、リードコマンドを使用します
1)ホスト名を入力するようユーザーに促します。2)実際にこの操作した場合、ユーザーに要求します。3)実際に実行します。
#サンプルスクリプト[ルート@のRLB〜/シェル]#猫read4.sh#!/ binに/ bashのの#1は、新しいホスト名を入力し、[新しいホスト名を印刷するようにユーザーにプロンプト「を変更したいホストを入力します-p読みます名前は「ホスト名のエコーは、」あなたは、ホスト名を変更したいと思うでしょう:$ホスト名を "
あなたが終了を確認していない場合の確認は、本当に、シェルコマンドを実行している場合は変更を行うかどうかを#2は、-p読む「あなたはあなたが本当にそれを次のよう変更しますか[Y | N]?」readly
#3は、ユーザ入力がYまたはNであり、それを実行した場合、Yは、真であるか否かを判断する他の終了した場合、[$ readly ==「Y」]であれば、次にhostnamectlセットホスト名$ホスト名&& bashの他出口Fiの
あなたは、ホスト名を変更したいと思うでしょうウェブ:スクリプト[ルート@ RLB〜/シェル]を変更したいホスト名を入力しますread4.sh#SHの#実装ウェブあなたは本当に、次の変更しますか[Y | N]を? N
変更したいホスト名を入力しますread4.sh [ルート@のRLB〜/シェル]#shを:あなたは、ホスト名を変更したいだろうウェブが:?ウェブであるあなたが本当に以下を変更してもよろしい[Yは| N] Y [ルート@web〜/シェル]#
- IPアドレスを変更するスクリプトを記述するために、リードコマンドを使用します
確かにこの操作場合1)新しいIPアドレスのホストビットの入力を求めるメッセージが表示されます。2)ユーザーに尋ねる。3)実際に実行します。
#サンプルスクリプト:[ルート@のRLB〜/シェル ]#猫read5.sh#/ binに/ bashの#1 新しいIPアドレスのホストビットを入力するようユーザーに促し、その後、新しいIPアドレスのホストビットを印刷する「と入力します-p読み!あなたは確認が実際にシェルコマンドを実行し、そうでない場合は、確認された場合は変更を行うかどうか#2新しいIPアドレスのホストビット:. $ IP」を変更したいだろう「IPエコー」:変更したい新しいIPアドレスのホストビット出口は-p読む「本当に以下を変更してもよろしい?[Y | N]は」readly #3 、ユーザが入力した判断がYまたはNである、それが実行された場合は、他の出口$ [もしあれば、Yは、真です。 == readly "Y"]; =次いでoldip ifconfig eth0 |awk -F '[ .]+' 'NR==2{print $6}'
セッド-i "S#1 \(oldip}#{\) #G"は/ etc / sysconfig / network-スクリプト/のifcfg-Ethを[01] &&
systemctl他再始動出口Fiネットワーク
スクリプトの#実装[ルート@のRLB〜/シェル]#shを変更したい新しいIPアドレスのホストビット入力read5.sh:あなたは次のように変更したいホストの新しい90ビットのIPアドレスを:90はあなたが本当に次のように読みしてもよろしいですコンテンツます[Y | N] Y?
#ログインに接続するために新しいIPアドレスを再接続するためにもこだわりました。
- シェル変数の置換
最長一致ルール%の$ {変数}を削除最短記述長さ変数値取得変数$ $ {変数}スクラッチ#マッチングルール一致、ルールマッチと一致$ {変数}スクラッチを##削除は、端から始まる一致、最短を除去%% $ {変数}マッチングルールのマッチングは最長の削除$ {古い/文字列変数/新しい文字列}新しい文字列変数の古い文字列、唯一の変数$ {の交換を置き換える//の終わりから始まります古い文字列/新しい文字列}すべての$ {変数置き換え、新しい文字列変数の古い文字列を置換:マッチ:マッチングルールインデックスとスライスを}
- 前から後ろに変数の内容を削除します。
[ルート@ RLB〜/シェル] #のURL = www.sina.com.cn# 変数を定義します。[root @のRLB〜/シェル] #エコー$# 出力変数値www.sina.com.cn [ルート@〜RLB /シェル]は##のURL $ {エコーバックする。}#フロントを、最短マッチsina.com.cn [RLBルート@〜/シェル]#エコーURL {$ ##。}#フロントバックアップする、最長一致CN
- 変数の内容から削除前
[ルート@ RLB〜]#のURL = www.sina.com.cn# 定義する変数[ルート@ RLB〜]#エコー $# 可変出力結果www.sina.com.cn [RLBルート@〜] $ {#エコーURL %。}先頭から#、最短一致www.sina.com [RLBルート@〜]#は、$ %% URL {エコー }#前後に、最長一致貪欲一致WWW
- 変数の置き換え
#エコー$ [RLB shell01 @ルート]
www.sina.com.cn#は$ {URL / N / N}をエコー[RLB shell01 @ルート]
www.siNa.com.cn#は$ {URLをエコー[RLB shell01 @ルート]は// N / N}
www.siNa.com.cN
- インデックスとスライスしました
[ルート@のRLB〜/シェル]#エコー$#0開始から、最初から5、列0-4 www.s [ルート@ RLB〜/シェル]#エコー$#5をカットは、5を切り出し、列、列5-9 ina.c [ルート@のRLB〜/シェル]#エコー$#5除去ina.com.cn前
- 実際のシナリオ:使用量がアラームメールの80%を超えた場合、現在のメモリ使用状況を見ます
1.どのように表示する方法#/合計によって使用されるメモリのメモリ#freeの-m 2.チェック割合100 =パーセント使用-m無料| '{。プリント$ 3/2 $ / ^ Memの/ awkは 100}'
#サンプルスクリプト[ルート@のRLB〜/シェル]#猫mem_used.shの#!/ binに/ bashの
メモリ使用率、アラームの80%以上を監視
= $ free_use(無料-m | awkの'/ ^ Memの/ {印刷$ 3/2 $。100}')IF [free_use%$ {。 、そして、あなたのメモリが80%を超える」エコー、現在の80を-gt}] $%「他エコー」は、通常の使用では、あなたの記憶は、現在%「Fiを提供して$
スクリプト[ルート@ RLB〜/シェル] mem_used.sh通常の使用では、あなたの記憶#shを、の#実装は9.0535パーセント現在
- シーンの練習2:バックアップと圧縮/毎月1日のすべてのコンテンツのetcディレクトリ、/ルート/ BAKディレクトリに格納され、2019-06-20_etc.tar.gzの形、スクリプト名のfilebackに保存されている、/ルートに保存されていますホームディレクトリ。
01)どのようなバックアップ?
02)ここで、バックアップ?
03)を使用するどのような方法?04)バックアップ・サイクル?
#スクリプトは次のように:[ルート@ RLB〜/シェル ]#猫fileback.sh番号は/ usr / binに/ bashのをDESTPATH = /ルート/ BAK日= $(日付+%のF)#1 準備目標位置[-d!。! $ DESTPATH] &&ます。mkdir -p $ DESTPATH #2. 目標位置までCZFバックアップタール\(DESTPATH / \) _etc.tar.gzの/ etc [RLBルート@〜/シェル]#のSHのfileback.sh
#执行脚本:[ルート@のRLB〜/シェル]#1のSH fileback.shタール:メンバー名から `/」有数の削除
#ビュー[ルート@ RLB〜/シェル]#LL /root/bak/2019-06-25_etc.tar.gz -rw-rを - r--の1つのルートルート10229422 6月25日17時15 /ルート/ BAK / 2019-06-25_etc.tar.gz
- シーンプラクティス3:/バックアップディレクトリの下に.txt拡張子を持つすべてのファイルを見つけるために、中/バックアップ10個の.txtファイルを作成します。
txt.bakする1)一括編集TXT
すべての.bakファイルが2 123.tar.gzに圧縮パッケージ化されている)
3)バッチファイル名を減少し、その後増加.BAKを削除
この方法の一つ:
[ルート@ RLB〜/シェル]#猫mv.shの#!は/ usr / binに/ bashの#1。改名
/バックアップ-iname "を見つけるの#(。SED -r | .txtの" \ 1 \ 1.bakの#gを#mv) '|のbash#2打包。
タールCZF /backup/123.tar.gz $#(/バックアップ-iname "* .BAK" を見つける。)3.復元
/バックアップ-iname "を見つけるの#(。SED -r |明博"#mvの\ 1.bak \ 1#gの.BAK) '| bashの
方法2:
[ルート@ RLB〜/シェル]#猫rename.shの#!/ binに/ bashの#は変数を定義
T = TXT B = BAK
#.TXTはtxt.bakのCD /バックアップにバックアップディレクトリの下にファイルの末尾を変更&& $ T $ T. $ B * .txtの名前を変更するには
#.BAKで終わるすべてのファイルが123.tar.gzタールzcvf /backup/123.tar.gz /backup/*.bak圧縮パッケージ
ファイル名#を復元
$ T.の$ Bの$のTの名前を変更*
方法3:
[ルート@のqiudao〜/シェル]#猫for_name.sh#!は/ usr / binに/ bashの
File_txt = $(/バックアップ/ -type fが-iname "* .TXT" を見つける| xargsの> /backup/txt.tt)は、i $ i.bak済$ mvをんで$(猫/backup/txt.tt)iについての
かかるCZF /backup/123.tar.gz ./*.bak
= $ File_bak(/バックアップ/ F型-iname "検索.BAK"> /backup/tar.tt)$でJ(CATの/backup/tar.tt)ミュージックビデオのために行う{J $ J $の%を。 } 08 DONEシーン4つの実践:次の文字列の語長を削除するには3未満である、私は18だqiuzengjia教師です 。
この方法の一つ:
ラウンドロビン方式について
私のために[ルート@のRLB〜/シェル]#猫for.sh#!/ binに/ shの私は、私は18です&&エコー完了$ Iを[$ {#iは} 3を-lt]午前qiuzengjia教師ですで
方法2:
awkの道
[ルート@のWEB01スクリプト]#私は、私は18だqiuzengjia教師ですエコーが| xargsの-n1 |私はawkの{(長さ<3)プリント場合} '私は18です
- シェル変数の操作
- 整数演算は、exprは、\((())\) []、小数演算をサポートしていません
直交を求めているからnum2 num1をnum2の*保存num1を/ num2の商num1を%num2の剰余 - 演算子意味はプラスNUM1 + NUM2 NUM1を求めます
#変数使用式exprを定義し、\((())、\) []、聞かせて数学について。exprはスペースで区切らなければなりません。
#expr
[ルート@ RLB〜/シェル]#NUM1 = 20 [ルート@ RLB〜/シェル]#からnum2 = 10 [ルート@ RLB〜/シェル]#式expr $ NUM1 + $ num2の30 [ルート@ RLB〜/シェル]#exprを$ NUM1 - $ num2の10 [ルート@のRLB /シェル]#式expr $ NUM1 * $のNUM2 exprの:構文エラー[ルート@のRLB /シェル]#式expr $ NUM1 * $のNUM2 200 [ルート@のRLB /シェル]#式expr $ NUM1 / $ num2の2 [ルート@のRLB /シェル]#式expr $ NUM1%$ num2の0
#$(())
[ルート@ RLB〜/シェル]#エコー$(($ NUM1 + $ num2の))30 [ルート@ RLB〜/シェル]#エコー$(($のNUM1 - $のNUM2))10 [ルート@ RLB〜/シェル] #は、$(($のNUM1の*の$のNUM2))200 [ルート@ RLB〜/シェル]#は、$(($ NUM1 / $ num2の))2 [ルート@のRLB〜/シェル]#は、$(($ NUM1%をエコーエコーエコー$のNUM2))0
#$ []
10 [ルート@ RLB〜/シェル]#エコーの$ [ - [ルート@ RLB〜/シェル]#エコー$ [$ NUM1 + $ num2の] 30 [ルート@ RLB〜/シェル]#は、$ [$ NUM2の$ NUM1]をエコー$のNUM1の*の$のNUM2] 200 [ルート@のRLB〜/シェル]#は、$ [$ NUM1 / $ num2の] 2 [ルート@ RLB〜/シェル]#は、$ [$ NUM1%$ NUM2] 0をエコーエコー
#let
[ルート@のqiudao /スクリプト]#のA = 1 [ルート@のqiudao /スクリプト]#は++ [ルート@ qiudao /スクリプト]#2 [ルート@ qiudao /スクリプト]#は++ [ルート@ qiudao /スクリプト]を聞かせて$をエコーしましょう#は$エコー3 [ルート@ qiudao /スクリプト]#はA-- [ルート@ qiudao /スクリプト]#は、awkは、Pythonのを$ 2 02.小数运算BCをエコーしましょう
#このコマンドは、ダウンロードする必要があります
[ルート@ RLB〜/シェル]#yumのBCをインストール-y
[ルート@のRLB〜/シェル]#のNUM1 = 10 [ルート@ RLB〜/シェル]#1からnum2 = 20 [ルート@ RLB〜/シェル]#エコー$ NUM1 + $ num2の| BC 30 [ルート@のRLB〜/シェル]#エコー$ num1- $ NUM2 | BC -10 [ルート@ RLB〜/シェル]#エコー$ NUM1の* $のNUM2 | BC 200 [ルート@ RLB〜/シェル]#エコー$ NUM1 / $ num2の| BC 0 [ルート@ RLB 〜/シェル]#エコー "スケール= 2; $ NUM1 / $ num2の" | BC 0.50 [ルート@ RLB〜/シェル]#エコーの$ NUM1 ^ $のNUM2 | BC 100000000000000000000 [ルート@ RLB〜/シェル]#エコー$ NUM1%$ num2の| BC 10
#awk
[ルート@ RLB /シェル]#AWK "BEGIN {印刷$ NUM1 + $ NUM2}" 30 [ルート@ RLB /シェル]#AWK "BEGIN {印刷$ NUM1 / $ NUM2}" 0.5 [ルート@ RLB〜/シェル] 「{BEGIN -10 [ルート@のRLB〜/シェル]#のawkの"BEGIN {印刷$ NUM1の* $ NUM2}" 200 [ルート@のRLB〜/シェル]#のAWK - #のawkは、 "{$のNUM2印刷の$ NUM1を} BEGIN"印刷$ NUM1 / $ NUM2} "0.5 [ルート@ RLB〜/シェル]#のAWK '{printfのBEGINの"%.2fを\ n"} / 2、' 0.50 [ルート@ RLB〜/シェル]#のAWK" {BEGIN印刷の$ NUM1 ^ $のNUM2}」100000000000000000000 [ルート@ RLB〜/シェル]#のawkは"" 10 {印刷$ NUM1%$ num2の} BEGIN
#Python
[ルート@ RLB〜/シェル]#エコー"印刷$ NUM1 + $ num2の" | pythonの30 [ルート@ RLB〜/シェル]#エコー"印刷$ num1- $ num2の" | pythonの-10 [ルート@ RLB /シェル]# "印刷の$ NUM1の*の$のNUM2を"エコー|パイソン200 [ルート@ RLB /シェル]#エコー"印刷$ NUM1 / $ num2の" | pythonの0 [ルート@ RLB〜/シェル]#エコー「印刷$ .0 / $ NUM2 "|のpython 0.5 [ルート@ RLB〜/シェル]#エコー"印刷の$ NUM1%の$のNUM2" | pythonの10 03变量运算案例
ケース1:PSのAXUにVSZ列を検索し、
[ルート@のRLB〜/シェル]#PSはaxuf | awkは '{$ 5印刷}' | VSZ -v grepの| TR "\ n" は "+" | sedの-rの#(。*)+#\ 1 \ nは#G」| BC 16506888
ケース2:数学電卓を作ります
例えば:最初の数10を入力20件の結果10 + 20 = 30秒桁表示を入力します
[ルート@のRLB〜/シェル] #猫count.shの#/ binに/ bashの"-p読んで最初の番号を入力してください。"!の:num2のエコー「$ NUM1 + NUM1は、 "第二の番号を入力して" -p読み\ (NUM2 = \) [$ + $ NUM1からnum2] "エコー" $ num1- \(NUM2 = \) [$ $ num1-からnum2] "エコー" $ NUM1 * \(NUM2 = \) [$の*の$のNUM1のNUM2]」 "$ NUM1 /エコー\(NUM2 = \) [$ NUM1 / NUM2 $]"
- 変数シェルケース
- シェルスクリプトは、印刷、システムのバージョン、カーネルバージョンのプラットフォーム、仮想プラットフォーム、静的ホスト名、eth0のネットワークカードのIPアドレスを使用して、LO LAN IPアドレス、現在の外部ホストのIPアドレスカールicanhazip.com
#サンプルスクリプト次のように:
[ルート@ RLB〜/シェル] = $#shのstatus.shます。#/ usr / bin / bashのシステム!(hostnamectl | grepのシステム| awkは '{、$ 4 $ 5 $ 3印刷}')カーネル= $(hostnamectl | grepのカーネルは、 | awkの-F: '{$ 2印刷}')のVt = $(hostnamectl | grepの仮想化| awkの '{$ 2印刷}')Statichostname = $(hostnamectl | grepの "スタティックホスト名" | awkは '{$ 3印刷}')のEth0 = $(ifconfigコマンドはeth0 | awkのNR2 {$ 2を印刷} ')ロー= $(LO ifconfigコマンド| AWK' NR2) '{$ 2を印刷} Network_T = $(カール-s icanhazip.com)
エコー「現在のシステムのバージョンです:$システム」エコー「現在のシステムのカーネルのは、次のとおりです。$カーネル」エコー「現在の仮想プラットフォームのです:$ Vtは」エコー「現在の静的なホスト名である:$ Statichostname」エコー「現在Eth0IPアドレスは次のとおりです。$のEth0 「エコー」電流Ioのアドレスは次のとおりです。現在の外部アドレスの$ Loの「エコー」される:$ Network_T "
#スクリプトの実行
[ルート@のRLB〜/シェル]#shのstatus.sh現在のシステムのバージョンは次のとおりです。CentOSのLinuxの7は現在のカーネルです:Linuxの3.10.0-957.el7.x86_64現在の仮想プラットフォームがある:VMwareの現在の静的ホスト名は次のとおりです。qiudao電流Eth0IPアドレスは次のとおりです。10.0.0.90電流Ioアドレスは次のとおりです。127.0.0.1現在の外部アドレスは:139.226.173.12
- 要件の説明:文字列変数=、スクリプトを実行した後、印刷出力文字列変数「BigdataプロセスはHadoopのある、Hadoopのは、オープンソースプロジェクトである」、とユーザーに次のオプションを提供します:
デマンド#1)印字文字列の長さ2)すべてのHadoop 3文字列を削除します)Linux 4のように最初にHadoopを置き換える)Linuxユーザ1の番号を入力して、すべてのHadoopを置き換える| 2 | 3 | 4、対応する項目の機能を実行することができます。
#スクリプト次のように:
[ルート@のRLB〜/シェル]#猫variable.shの#!は/ usr / binに/ bashの文字列=)エコー$文字列猫<< EOF 1)、印刷の長さの文字列2 "BigdataプロセスはHadoopのある、Hadoopのは、オープンソースプロジェクトです" 、LinuxのEOFとして、すべてのHadoopを置き換え、Linux 4のように最初にHadoop)を置き換える、文字列のすべてのHadoop 3)を削除
"| 2 | 3 |数1入力4:" -p読みVAR
[$のVAR -eq 1]であれば、その後、エコー現在の文字列の長さの変数は次のとおりです。現在の変数の$文字列の長さは#echoです:$エコー| WC -L
Fiの
[$するvar -eq 2]場合は、次に$ {//文字列のHadoop /} Fiのエコー
[$するvar -eq 3]であれば、次に$ {ストリング/ Hadoopの/ Linuxの} Fiのエコー
[$するvar -eq 4]であれば、次に$ {//文字列のHadoop / Linuxの} Fiのエコー
#スクリプトの実行
[ルート@ qiudao〜/シェル]#1のSH variable.sh BigdataプロセスはHadoopのは、Hadoopのは、オープンソースプロジェクトは、1)、印刷の長さの文字列2)、文字列はすべてのHadoopを削除する。3)は、最初にHadoopのLinux 4交換することです)、番号1を入力してくださいすべてのHadoopのLinuxを置き換えるために| 2 | 3 | 4、またはQ | Q:1現在の可変長文字列は次のとおりです。BigdataプロセスはHadoopのあるvariable.sh 57 [ルート@ qiudao〜/シェル]#shを、 、4 | Hadoopのは、オープンソースプロジェクト1)、印刷の長さの文字列2である)、文字列はすべてのHadoopを削除3)、Linux用の最初にHadoopを置き換える4)、すべてのHadoopのLinuxを置き換えるために番号1を入力してください。| 2 | 3またはq | Q:2 Bigdataプロセスはオープンソースプロジェクト[ルート@ qiudao〜/シェル]#1のSH variable.sh BigdataプロセスはHadoopのですが、Hadoopの)は、オープンソースプロジェクト1)、印刷の長さの文字列2である、である、文字列を削除すべてのHadoop 3)、すべてのHadoopのLinuxを置き換えるために、HadoopのLinuxの4)の最初に取って代わる番号1を入力してください| 2 | 3 | 4、またはqは| Q:3 Bigdataプロセスは、Linuxで、Hadoopのは、オープンソースプロジェクトである[ルート@qiudao〜/シェル]#1のSH variable.sh Bigdataプロセスは、Hadoopのです、4 | Hadoopのは、オープンソースプロジェクト1)、印刷の長さの文字列2である)、文字列はすべてのHadoopを削除3)、Linux用の最初にHadoopを置き換える4)、すべてのHadoopのLinuxを置き換えるために番号1を入力してください。| 2 | 3またはq | Q:4 Bigdataプロセスは、Linuxで、Linuxはオープンソースプロジェクトです