シェル演習-17

質問

、スクリプトを書くのMySQLサービス123456の現在のrootパスワードという仮定は、(たとえば、あなたが通常の実行mysqlのショーPROCESSLISTを入力することができます)MySQLサービスは正常であることを検出し、

そして、それはからのものである場合、サービスは、現在メインMySQLやから何であるかを検出し、その主なサービスからの例外かどうかを確認してください。それは主であるならば、あなたは何もする必要はありません。

回答

#!/bin/bash
mysql="/usr/local/mysql/bin/mysql -uroot -p123456"
if ! $mysql -e "show processlist" >/dev/null 2>/dev/null 
then
    echo "MySQL service is down."
    exit
else
    $mysql -e "show slave status\G" 2>/dev/null >/tmp/slave.stat
    n=`wc -l /tmp/slave.stat|awk '{print $1}'`
    if [ $n -eq 0 ]
    then
    echo "This is master."
    else
    echo "This is slave."
    #找出Slave_IO_Running和Slave_SQL_Running是yes 还是no
    egrep 'Slave_IO_Running:|Slave_SQL_Running:'/tmp/slave.stat|awk -F ': ' '{print $2}' > /tmp/SQL.tmp
    #如果为no则down掉了 
    if grep -qw "No" /tmp/SQL.tmp 
    then
        echo "The slave is down."
    fi
    fi
fi

質問

オプションの増加をサポートするか、次のように、ユーザの特定の要件がある削除するシェルスクリプトを書きます:

  1. 「 - デル」、 - 、「を追加」「 - ヘルプ」、入力の他のオプションのエラー:唯一の3つのオプションをサポートしています。
  2. 「--add」を使用する場合は、ユーザー名が存在を確認する必要があり、フィードバックの存在があり、それが追加されませんでした。それは存在しない、ユーザーを作成し、同じユーザー名とパスワードを使用する必要があります。
  3. 「--del」を使用する場合は、確認する必要があり、ユーザ名が存在し、それがユーザーとそのホームディレクトリを削除して存在しています。それが存在しない場合、ユーザーからのフィードバックは存在しません。 
  4. --helpオプションは、フィードバック方法を使用することです。
  5. 成功は0、失敗したゼロ以外の正の整数として、ユーザーを追加または削除、エコー$?検出スクリプトの実装を使用します。
  6. コンマは一回で複数のユーザーを追加または削除、分割することができます。例adddel.sh --addユーザー1、ユーザー2、ユーザー3用

回答

#!/bin/baash

#判断参数,零个参数或者大于两个参数,将要报错退出 
if [ $# -eq 0 ] || [ $# -gt 2 ]
then
    echo "Wrong, use bash $0 --add username, or bash $0 --del username or bash $0 --help"
    exit
fi

#useradd用户函数
ex_user()
{  
  if ! id $1 2>/dev/null >/dev/null
    then
    useradd $1 && echo "$1 add successful."
    else
    echo $1 exist.
    fi
}

#删除用户
notex_user()
{
    if id $1 2>/dev/null >/dev/null
    then
    userdel $1 && echo "$1 delete successful."
    else
    echo $1 not exist.
    fi
}

case $1 in 
    --add)
    if [ $# -eq 1 ]             //参数为1 直接报错退出
    then
        echo "Wrong, use bash $0 --add user or bash $0 --add user1,user2,user3..."
        exit
    else
        n=`echo $2| awk -F ',' '{print NF}'`        //用户个数
        #用户个数大于1的,需要轮询下,创建,等于1的直接创建
        if [ $n -gt 1 ]
        then
            for i in `seq 1 $n`
            do
            username=`echo $2 |awk -v j=$i -F ',' '{print $j}'`
            ex_user $username
            done
        else
        ex_user $2
        fi
    fi
    ;;
    --del)
    if  [ $# -eq 1 ]     //参数为1 直接报错退出
        then
            echo "Wrong, use bash $0 --del user or bash $0 --del user1,user2,user3..."
            exit
        else
            n=`echo $2| awk -F ',' '{print NF}'`            //用户个数
            #用户个数大于1的,需要处理下创建,个数为1的直接删除 
            if [ $n -gt 1 ]
            then
                for i in `seq 1 $n`
                do
                    username=`echo $2 |awk -v j=$i -F ',' '{print $j}'`
            notex_user $username
                done
            else
        notex_user $2
            fi
        fi
        ;;
    --help)
        if  [ $# -ne 1 ]               //参数为1直接报错退出
        then
            echo "Wrong, use bash $0 --help"
            exit
        else

    echo "Use bash $0 --add username or bash $0 --add user1,user2,user3... add user."
    echo "    bash $0 --del username -r bash $0 --del user1,user2,user3... delete user."
    echo "    bash $0 --help print this info."
    fi
    ;;
    *)                 //其他情况,直接报错 告知情况 
    echo "Wrong, use bash $0 --add username, or bash $0 --del username or bash $0 --help"
    ;;
esac

質問

3で割り切れる100の正の整数内で計算することができますすべて:スクリプトを書きます

回答

#!/bin/bash
sum=0
for i in `seq 1 100`
do
    j=$[$i%3]
    if [ $j -eq 0 ]
    then
    sum=$[$sum+$i]
    fi
done
echo $sum

質問

算術関数を達成するためのスクリプトを記述するためにパラメータを渡す方法を使用します。
たとえば、次のSH a.sh 1 2は、加算、減算、乗算、加算結果を計算します。

要件:

  1. 判断するためのスクリプトを、供給された2つの数字は整数でなければなりません
  2. 減算又は除算を行う場合と、縮小多数は、デジタル・サブトラクションを多数必要が判断する必要がある多数で必要とされる時分割小さな数で分割され、その結果、必要性は、二つの小数点を保持します。

回答

#!/bin/bash
is_nu()
{
    n=`echo $1 |sed 's/[0-9]//g'`
    if [ -n "$n" ]
    then
    echo "给出的参数必须是正整数"
        exit
    fi
}
if [ $# -ne 2 ]
then
    echo "必须要输入两个参数"
    exit
else
    is_nu $1
    is_nu $2
fi

big()
{
    if [ $1 -gt $2 ]
    then
    echo $1
    else
    echo $2
    fi
}

small()
{
    if [ $1 -lt $2 ]
    then
        echo $1
    else
        echo $2
    fi
}

add()
{
    sum=$[$1+$2]
    echo "$1+$2=$sum"
}

jian()
{
   b=`big $1 $2`
   s=`small $1 $2`
   cha=$[$b-$s]
   echo "$b-$s=$cha"
}

cheng()
{
    ji=$[$1*$2]
    echo "$1x$2=$ji"
}
chu()
{
   b=`big $1 $2`
   s=`small $1 $2`
   v=`echo "scale=2;$b/$s"|bc`
   echo "$b/$s=$v"
}

add $1 $2
jian $1 $2
cheng $1 $2
chu $1 $2

質問

実行後、スクリプトを書く、ラインを印刷する「を入力してください番号:」促し、値を入力するようにユーザを必要とし、その値をプリントアウトし、再度値を入力する必要があります。ユーザーが入力するまで、「終わり」ストップ。

回答

#!/bin/bash
while :
do
    read -p "Please input a number: " n
    if [ -z "$n" ]
    then
    echo "请输入一个纯数字."
    continue
    fi
    if echo $n |grep -qi 'end'
    then
    exit
    fi
    n1=`echo $n|sed 's/[0-9]//g'`
    if [ -n "$n1" ]
    then
    echo "请输入一个纯数字."
        continue
    else
    echo "你输入的数字是: $n"
        continue
    fi
done

おすすめ

転載: blog.51cto.com/865516915/2433782