シェル演習-18

質問

これは、ネットワークカードの名前を入力するようユーザーに促し、その後、我々は、IPスクリプトの出力カードを使用して、以下の質問を検討してください。
 

  1. に対処する方法を、カード仕様と一致しない文字の名前を入力します。
  2. 準拠した名前はなく、単にこのカードと応答方法を持っていません。

回答

#!/bin/bash
ip add |awk -F ': ' '$1 ~ "^[1-9]" {print $2}' > /tmp/eth.list
while :
do
    eths=`cat /tmp/eth.list |xargs`
    read -p "Please input a if name(The eths is `echo -e "\033[31m$eths\033[0m"`): " eth
    if [ -z "$eth" ]
    then
    echo "Please input a if name."
    continue
    fi
    if ! grep -qw "$eth" /tmp/eth.list
    then
    echo "The if name is error."
    continue
    else
    break
    fi
done

if_ip() 
{
    ip add show dev $1 |grep ' inet ' |awk '{print $2}'|awk -F '/' '{print $1}' >/tmp/$1.txt
    n=`wc -l /tmp/$1.txt|awk '{print $1}'`
    if [ $n -eq 0 ]
    then
    echo "There is no ip address on the eth."
    else
    echo "The ip addreess is:"
        for ip in `cat /tmp/$1.txt`
    do
        echo -e "\033[33m$ip\033[0m"
    done
    fi
}

if_ip $eth

質問

以下の機能を実現するためのスクリプトを書きます:
 

  1. スクリプトはまた、パラメータを指定せずに使用することができます
  2. あなたが複数のパラメータを持つことができ、各パラメータはディレクトリでなければなりません
  3. 0に等しい場合は、引数の数にスクリプトを確認し、その後、それ以外の表示は、各パラメーターのサブディレクトリが含まれている、現在のディレクトリ自体を示しています。

回答

#!/bin/bash
if [ $# -eq 0 ]
then
    echo "当前目录下的文件是:"
    ls .
else
    for d in $@
    do
    if [ -d $d ]
    then
        echo "目录$d下有这些子目录:"
        find $d -type d 
    else
        echo "并没有该目录:$d"
    fi
    done
fi

質問

次の要件を満たす、我々は2つのパラメータを受け入れることができ、シェル関数を定義します。
 

  1. 最初のパラメータはURLである、あなたは、ファイルをダウンロードすることができます第二引数がディレクトリで、それは、保存した場所をダウンロードした後、あります
  2. ディレクトリにユーザーが存在しない場合は作成した場合は、次に進みますが、作成するかどうかを尋ね、そうでない場合、関数は呼び出し元のスクリプトに51のエラー値を返します。
  3. 指定したディレクトリが存在する場合、それ以外の場合は、呼び出し元のスクリプト52に戻り、0は、呼び出し元のスクリプトに返され、成功すれば、成功したかどうかのテストファイルをダウンロードするには、ダウンロードコマンドの終了をファイルをダウンロード

回答

#!/bin/bash
if [ $# -ne 2 ]
then
   echo "你必须要输入两个参数,第一个参数是网址,第二个参数是目录." 
   exit 1
fi

if [ ! -d $2 ]
then
    while :
    do
    echo "你输入的第二个参数,并不是一个存在的目录。是否要创建该目录呢?(y|n): "c
    case $c in 
    y|Y)
        mkdir -p $2
        ;;
    n|N)
        exit 51
        ;;
    *)
        echo "请输入y或者n."
        continue
        ;;
    esac
    done
else
    cd $2
    wget $1 
    if [ $? -eq 0 ]
    then
    exit 0
    else
    echo "下载失败."
    exit 52
    fi
fi

質問

スクリプトを書く推測、及びデジタルプリセット番号は、ユーザ(ランダムに生成された番号0-100)によって入力された場合も同様の出口、またはユーザーが入力されているせ、及び予め設定されたよりも大きいか小さいユーザのデジタル数字を促します。

回答

#!/bin/bash
n=$[$RANDOM%101]
while :
do
    read -p "请输入一个0-100的数字:" n1
    if [ -z "$n1" ]
    then
    echo "必须要输入一个数字。"
    continue
    fi
    n2=`echo $n1 |sed 's/[0-9]//g'`
    if [ -n "$n2" ]
    then
    echo "你输入的数字并不是正整数."
    continue
    else
    if [ $n -gt $n1 ]
    then
        echo "你输入的数字小了,请重试。"
        continue
    elif [ $n -lt $n1 ]
    then
        echo "你输入的数字大了,请重试。"
        continue
    else
        echo "恭喜你,猜对了!"
        break
    fi
    fi
done

質問

次の要件を満たすことができるシェルスクリプトを書きます:
 

  1. スクリプトは(英語では、数字は他の特殊記号を持っていない、大文字と小文字可能)名前の入力を要求し、その後、0〜99の間の乱数を出力し実行した後、スクリプトが終了していない、継続名前を入力するように求め
  2. 結果出力の場合、同じ名前の入力、初めてのデジタル出力は、名前を入力するとき
  3. デジタル出力はすでに、次回も起こらないことができていました
  4. 入力qまたはQと、スクリプトが終了します。

回答

#!/bin/bash
f=/tmp/user_number.txt
j_n()
{
    while :
    do
    n=$[RANDOM%100]
    if awk '{print $2}' $f|grep -qw $n
    then
        continue
    else
        break
    fi
    done
}

while :
do
    read -p "Please input a username: " u
    if [ -z "$u" ]
    then
    echo "请输入用户名."
    continue
    fi

    if [ $u == "q" ] || [ $u == "Q" ]
    then
    exit
    fi 

    u1=`echo $u|sed 's/[a-zA-Z0-9]//g'`
    if [ -n "$u1" ]
    then
    echo "你输入的用户名不符合规范,正确的用户名应该是大小写字母和数字的组合"
    continue
    else
    if [ -f $f ]
    then
        u_n=`awk -v uu=$u '$1==uu {print $2}' $f`
        if [ -n "$u_n" ]
        then
        echo "用户$u对应的数字是:$u_n"
        else
        j_n
        echo "用户$u对应的数字是:$n"
            echo "$u $n" >>$f
        fi
    else
        j_n
        echo "用户$u对应的数字是:$n"
        echo $u $n >> $f
    fi
    fi
done

おすすめ

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