シェル演習

演習1:スクリプトを作成する
       1.変数FILEの値を/ etc / passwdに設定する
       2. / etc / passwdの各ユーザーに挨拶し、相手のIDが
        次のようになることを伝えます(ヒント:LINE = `wc -l / etc / passwd | cut -d" "-f1`)
         こんにちは、ルート、あなたのUIDは0です。3
       .ユーザーの数を数えます

1つ回答:

#!/ bin / bash

fl = / etc / passwd

count = `cat $ fl | wc -l`

次はパイプラインで、ファイルの各行を読み取る次のループです

猫$ fl |

行を読みながら

行う

        #分割後のコンテンツの最初の列を取得

         user = `echo $ line | awk -F ':' '{print $ 1}'`

         代表 :セグメント$ 1は最初に取ることです1つのセグメントを

         uid = `echo $ line | awk -F ':' '{print $ 3}'`

     echo "hello、$ user Your UID is $ uid"

終わった

echo "==== User_count:$ count ===="

 

 

2つの回答:#!/ Bin / bash

           file = "/ etc / passwd"

           LINES = `wc -l $ file | カット-d "" -f1`

           私のために `seq 1 $ LINES`; do

           userid = `head-$ I $ file | 尾-1 |カット-d:-f3`

           ユーザー名= `head-$ I $ file | 尾-1 |カット-d:-f1`

           echo "hello $ username、your UID is $ userid"

           終わった

           echo "$ LINESユーザーがいます"

 3つの回答:#!/ Bin / bash

           file = / etc / passwd

           num = 0とします

           `cat $ file`で私のために; do

           ユーザー名= `echo" $ I "| カット-d:-f1`

           userid = `echo" $ I "| カット-d:-f3`

           echo "Hello、$ username、your UID is $ userid"

           num = $ [$ num + 1]

           終わった

           echo「$ numユーザーがいます」

ユーザー数が以前取得しました

 

 

 演習2:スクリプトを作成する
      1.作業ディレクトリを/ varに切り替える
      2.次のように、/ varディレクトリ内の各ファイルまたはサブディレクトリに順番に挨拶します
        ((ヒント:/ var / *のFILE、または `のFILEを` ls / var`;)
        こんにちは、ログ
      3. / varディレクトリに複数のファイルがあり、答え1が表示されます。

  #!/ bin / bash

cd / tmp

/ tmp / *のfor i

行う

        echo "こんにちは、$ i"

終わった

count = `ls -l | grep '^-' | wc -l`

echo "==== file_count:$ count ===="

2つの回答:#!/ Bin / bash

         cd / var

         num = 0とします

         `ls / var / *`; doの私にとっては

         echo "hello $ I"

         num = $ [$ num + 1]

         終わった

         echo "ファイル数は$ numです"


練習3:スクリプト作成
      1.セットに変数ファイルは/ etcの値を/ passwdの
      2.ループは、ファイル/ etc / passwdの最初の2,4,6,10,13,15行を読み込み、その内容を表示
      3 。これらの行を/ tmp / mypasswdファイルに保存します

回答:

#!/ bin / bash

        file = "/ etc / passwd"

        2 4 6 10 13 15のIの場合;

        exec 3> / tmp / mypasswd

        line = `head-$ I $ file | 尾-1`

        「$ line」をエコー

        echo "$ line">&3

        exec 3>&-

        行って
練習4:スクリプト作成
       スクリプトに2つの整数を渡すために、スクリプトを算出して表示し二つの整数、違い、製品、商

回答:

#!/ bin / bash

a = $ 1

b = $ 2

[-z $ a] && echo "\ $ 1 number1"を&&終了1

[-z $ b] && echo "please \ $ 2 number2" && exit 2

[!$#-eq 2] && echo "--please num1 num2" && exit 3

#$#スクリプトに渡されるパラメーターの数

#-eqは= 同等、-ne は等しくない、 -ge> =、-gt>、-le <=、-lt <

エコー "$ a + $ b = $(($ a + $ b))"

エコー "$ a-$ b = $(($ a-$ b))"

echo "$ a * $ b = $(($ a * $ b))"

エコー "$ a / $ b = $(($ a / $ b))"

 

vim test.sh

       #!/ bin / bash

       echo "first number $ 1"(最初の数値の出力を示します)

       echo "second number $ 2"(2番目の数値の出力を示します)

       echo "$(($ 1 + $ 2))"(2つの数値の合計を出力)

       echo "$ [$ 1- $ 2]"(2つの数値の差を出力)

       echo "$ [$ 1 * $ 2]"(2つの数値の積を出力します)

       echo "$ [$ 1 / $ 2]"(2つの数値の商を出力します)

       :wq(viエディターを保存して終了する手段)

       chmod + x test.sh(test.shに実行権限を与える)

       ./test.sh 2 3(2つのパラメーターを渡してスクリプトを実行する     

演習5 :スクリプトを
        記述1.ファイル/tmp/20200419.tar.gzが存在するかどうかを確認し、存在しない場合はループで待機します。

  1. 指定されたディレクトリ/ home / vp + work ID / dataにファイルをコピーして解凍します。

3.当日に不要なftp20200419.sqlファイルを削除します
  

 回答:    

#!/ bin / sh

#呼び出し方法:./chk_data.sh 2020-04-19

#Data Date

p_as_of_date = $ 1

#データ日付の有効性を確認します

checklen = `expr length" $ p_as_of_date "`

if [$ {checklen} -ne 10];その後

    echo "@RET_MSG:日付形式が正しくない、形式が正しい:YYYY-MM-DD"

    出口-1

そうしないと

    check1 = `echo $ 1 | カット-c 5`

    check2 = `echo $ 1 | カット-c 8`

    if ["X $ {check1}" = "X-"] && ["X $ {check2}" = "X-"];その後

        日付-d $ 1> / dev / null 2>&1

        もし[$?-eq 0];その後

            echo "@RET_MSG:日付が正しく入力されました!"

        そうしないと

            echo "@RET_MSG:日付が無効です!"

            出口-2

        されます

    そうしないと

        echo "@RET_MSG:日付の区切り記号が正しくありません。正しい形式:YYYY-MM-DD"

        出口-3

    されます

されます

 

 

v_as_of_date = `echo $ {p_as_of_date} | awk 'gsub(/ \-/、" "){print $ 0}'`

 

エコー$ {v_as_of_date}

#データファイルのパス

p_data_dir = / tmp /

m_data_dir = / home / vp000301 / data /

#5S以内にファイルサイズが変更されないかどうかを確認し、変更されている場合はファイルを解凍します。それ以外の場合は、5Sがチェックを続けるまで待ちます

 

cd $ {p_data_dir}

 

pwd

 

echo $ {v_as_of_date} .tar.gz

 

while [1 -eq 1]

行う

if [-f $ {v_as_of_date} .tar.gz];その後

   

   char_num1 = `wc -c $ {v_as_of_date} .tar.gz | awk '{print $ 1}'`

   寝る5

   char_num2 = `wc -c $ {v_as_of_date} .tar.gz | awk '{print $ 1}'`

   エコー$ char_num1

   エコー$ char_num2

   if [$ char_num1 -eq $ char_num2];その後

      echo "日付ファイルは大丈夫です!"

      ブレーク;

   そうしないと

      echo "日付ファイル$ {v_as_of_date} .tar.gzが送信しています!"

      5睡眠;

      継続する;

   されます

 

そうしないと

   echo "データファイルが見つかりません:" $ {v_as_of_date} .tar.gz

   echo $ {v_as_of_date} .tar.gz

   5睡眠;

されます

 

終わった

 

cp $ {v_as_of_date} .tar.gz $ {m_data_dir}

 

エコー$?

 

cd $ {m_data_dir}

 

pwd

 

tar -zxvf $ {v_as_of_date} .tar.gz

 

cd $ {v_as_of_date}

 

rm ftp $ {v_as_of_date} .sql

元の記事を15件公開 賞賛7件 10,000件以上の表示

おすすめ

転載: blog.csdn.net/qq_40938267/article/details/105624980