日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

shell训练营Day18

發布時間:2025/7/25 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 shell训练营Day18 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

練習31
提示用戶輸入網卡的名字,然后我們用腳本輸出網卡的ip,需要考慮下面問題:
?

  • 輸入的字符不符合網卡名字規范,怎么應對。
  • 名字符合規范,但是根本就沒有這個網卡又怎么應對。
  • #!/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

    練習32
    寫一個腳本,實現如下功能:
    ?

  • 腳本可以帶參數也可以不帶
  • 參數可以有多個,每個參數必須是一個目錄
  • 腳本檢查參數個數,若等于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

    練習33
    定義一個shell函數,能接受兩個參數,滿足以下要求:
    ?

  • 第一個參數為URL,即可下載的文件,第二個參數為目錄,即下載后保存的位置
  • 如果用戶給的目錄不存在,則提示用戶是否創建,如果創建就繼續執行,否則,函數返回一個51的錯誤值給調用腳本
  • 如果給的目錄存在,則下載文件,下載命令執行結束后測試文件下載成功與否,如果成功,則返回0給調用腳本,否則,返回52給調用腳本
  • #!/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

    練習34
    寫一個猜數字腳本,當用戶輸入的數字和預設數字(隨機生成一個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

    練習35
    寫一個shell腳本,能實現如下需求:
    ?

  • 執行腳本后,提示輸入名字(英文的,可以是大小寫字母、數字不能有其他特殊符號),然后輸出一個隨機的0-99之間的數字,腳本并不會退出,繼續提示讓輸入名字
  • 如果輸入相同的名字,輸出的數字還是第一次輸入該名字時輸出的結果
  • 前面已經輸出過的數字,下次不能再出現
  • 當輸入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 ] thenu_n=`awk -v uu=$u '$1==uu {print $2}' $f`if [ -n "$u_n" ]thenecho "用戶$u對應的數字是:$u_n"elsej_necho "用戶$u對應的數字是:$n"echo "$u $n" >>$ffi elsej_necho "用戶$u對應的數字是:$n"echo $u $n >> $f fi fi

    done

    轉載于:https://blog.51cto.com/12898947/2340030

    總結

    以上是生活随笔為你收集整理的shell训练营Day18的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。