Bashプログラミング(三)


一、bashインタラクティブプログラミングスクリプトパラメータ:ユーザーインタラクティブ://linuxの重要な思想、できるだけユーザーとインタラクティブになることを避ける.スクリプト伝達パラメータ、a.sh tom jery 2.キーボードでデータを取得read//-p'promtpt//プロンプト//read a b入力tomとjerryはそれぞれaとb-t timeoutタイムアウト時間read a a b//入力ja tom wolf//a=jaと認識されます.b='tom wolf'read-t 5-p「enter a name:」nameスクリプト:ユーザーの追加
[root@mt test]# cat adduser.sh 
#!/bin/bash
#
read -p "Enter a username : " name
[ -z $name ] && echo "username is needed ..." && exit 2
read -p "Enter a password for $name " passwd
[ -z $passwd ] && password="password"
if id $name &> /dev/null ;then
   echo "$name is exists."
else
   useradd $name
   echo "$password" | passwd --stdin $name &> /dev/null
   echo "useradd succeed.."
fi

        3.bash-n a.sh//構文エラー、論理エラーbash-x a.sh//デバッグ実行二、bash選択実行(if)プロセスプログラミング言語の実行フロー:実行順序選択実行ループ実行選択実行実行:&、|if文case文if文:3つのフォーマットの単一分岐if文if CONDITION;then if-true分岐;fi二重分岐のif文if CONDITION;then if-trueブランチelse if-falseブランチfiマルチブランチif文if CONDITION 1;then条件1は真分岐elif CONDITION 2である.then条件2;真分岐elif CONDITION 3;then条件3;真の分岐のために...elseのすべての条件が満たされていない場合のブランチ注意:ブランチは1つしか実行されず、まず真としてテストされます.複数の条件は同時に満たすことができ、最初に一致したスクリプト1-3ビットif文3、ループ実行//コードを0,1回繰り返し実行する条件:条件を満たしてからループ終了条件に入る:各ループに終了条件があり、bashスクリプト:forループwhileループuntilループforループの2つのフォーマット:(1)遍歴リスト(2)制御変数遍歴リスト:for VARABLE in LIST;doループdoneの入力条件:リストに要素がある限り、ループ終了条件に入る:リスト内の要素遍歴完了LISTの生成方式(1)直接与える(2)整数リスト{start..end}/echo{20..30}seq 10//1-10 seq 5 10//5から10 seq 1 2 10//ステップ数2、奇数リスト(3)cat/ls/varのみ出力:リストを返すコマンドcat/etc/issue(4)ls-d/etc/p*for i in/etc/p*で可能(5)変数は$@,$#などのスクリプト1を参照:スクリプトはファイル名を渡し、ファイルタイプが何であるかを判断する
    #!/bin/bash
    #
    if [ $# -lt 1 ] ;then
        echo "At lease one path.."
        exit 1
    fi
    if ! [ -e $1 ] ;then        // 
        echo "No suck file.."
        exit 2
    fi
    
    if [ -f $1 ] ;then
        echo "Common file.."
    elif [ -d $1 ] ; then
        echo "Directory.."
    elif [ -L $1 ] ; then
        echo "Symbolic file..."
    elif [ -b $1 ] ;then
        echo "block file..."
    elif [ -c $1 ] ; then
        echo "Character file..."
    elif [ -S $1 ]; then
        echo "Socket file..."
    else
        echo "Unknown ... "
    fi

スクリプト2:スクリプトにパラメータを渡します.このパラメータは、ユーザー名がid番号に基づいてタイプ0:root 1-999に使用されていると判断します.システムユーザー1000+:ログインユーザー
    #!/bin/bash
    #
    [ $# -lt 1 ] && echo "At least one user name." && exit 1
    ! id -u $1 &> /dev/null && echo "no suck user" && exit 2
    userid=$(id -u $1)
    if [ $userid -eq 0 ] ;then
        echo "root"
    elif [ $userid -ge 1000 ] ;then
        echo "logging user."
    else 
        echo "System user."
    fi

スクリプト3:以下のメニューをユーザーdisk)show disks info mem)show memory infoとしてリストします.cpu)show cpu info cat/proc/meminfoまたはlscpu*)quitは、ユーザーに自分の選択を提示し、その選択に対応するシステム情報を表示する
    #!/bin/bash
    #
    cat 《《  EOF
    disk) show disks info
    mem)  show memory info;
    cpu)  show cpu info
    *)    quit
    EOF
    read -p "Your choice: " opt
    if [ "$opt" == 'disk' ] ;then  
        fdisk -l /dev/sd[a-z]
    elif [ "$opt" == 'mem' ] ;then
        free -h
    elif [ "$opt" == 'cpu' ] ;then
        lscpu
    else
        echo "Unknown option.."
        exit 3
    fi

スクリプト4:ユーザー#を追加!/bin/bash    #    for i in user20 user21 user22 ;do        if id $i &>/dev/null ; then            echo "$i exists.."Else useradd$i&&echo「Add user$i succeed」fi doneスクリプト5:1-100からの和
    #!/bin/bash
    #
    declare -i sum=0
    for i in {1..100};do
        sum=$[$sum + $i] 
        echo "\$sum is $sum" //  $ 
    done
    echo $sum

スクリプト6:判断/var/log下のすべてのファイルのタイプメソッド1:file/var/log/*メソッド2:スクリプト
 #!/bin/bash
    #
    for filename in /var/log/* ; do
        echo -n "$filename    "
    if [ -f $filename ] ;then
        echo "Common file.."
    elif [ -d $filename ] ; then
        echo "Directory.."
    elif [ -L $filename ] ; then
        echo "Symbolic file..."
    elif [ -b $filename ] ;then
        echo "block file..."
    elif [ -c $filename ] ; then
        echo "Character file..."
    elif [ -S $filename ]; then
        echo "Socket file..."
    else
        echo "Unknown ... "
    fi
    done

シナリオ7:練習1.それぞれ100以内のすべての偶数の和、および奇数の和を求める.現在のシステム上のすべてのユーザのidの和3を計算する.スクリプト・パラメータを使用してスクリプトにディレクトリを渡し、そのディレクトリの下のすべてのファイル・ファイルの行数を計算し、そのファイルの合計数を説明します.