bash .sh 脚本循环而不是结束/退出

bash .sh 脚本循环而不是结束/退出

我正在编写我的第一个 bash 脚本。每次我运行它以确保它正常工作时,除了done最后的命令外,一切都按我的意愿运行。相反,它会循环询问用户是否确定要授权它进行将要进行的更改。

因为这是我第一次编写脚本,所以我确信有更好、更有效的方式来执行我编写的操作,所以我不要求在这方面提供意见。事实上,它做了我想要它做的事情(即使它似乎无法结束),对我来说已经足够好了。

这是脚本(您看到的任何内容[with backets]都是我为这个 SU:Question 包含的内容,实际上并不在脚本本身中):

#!/bin/bash

perl -e 'print "\n"x128;'

echo ' ' ; echo ' ' ; 

echo    "


[Omitted to make this SU:Question shorter]

    ⁓⁓⁓⁓⁓⁓⁓⁓⁓⁓⁓⁓⁓⁓⁓⁓⁓⁓⁓⁓⁓⁓⁓⁓⁓⁓⁓⁓⁓⁓⁓⁓⁓⁓⁓⁓⁓⁓⁓⁓⁓

    TLDR the above info?
    That's okay, it is also available in the included README.

            ⁓⁓⁓⁓⁓⁓⁓⁓⁓⁓⁓⁓⁓⁓⁓⁓⁓⁓⁓⁓⁓⁓⁓⁓⁓⁓⁓⁓⁓⁓⁓⁓⁓⁓⁓⁓⁓⁓⁓⁓⁓
    "

[This does not do anything, just something neat I learned how to do...]

    c=3 # seconds to wait
    REWRITE="\e[25D\e[1A\e[K"
    echo "    First thing first... I'll need you have run this as ROOT/SU..."
    while [ $c -gt 0 ]; do 
        c=$((c-1))
        sleep 1
        #echo -e "  ${REWRITE}$c"
    done

    echo ' '



 if [ $(id -u) != 0 ]; then
     echo "    Oops, you didn't run this as ROOT or SU! Here is the proper command:

    ⟹   sudo ./enable-wifi.sh   ⟸

            "
    exit
     # elevate script privileges

     else
        echo "    ⁓⁓⁓⁓⁓⁓⁓⁓⁓⁓⁓⁓⁓⁓⁓⁓⁓⁓⁓⁓⁓⁓⁓⁓⁓⁓⁓⁓⁓⁓⁓⁓⁓⁓⁓⁓⁓⁓⁓⁓⁓

    Awesome, you're ready!"


 fi

while true; do
    read -p "
    Just to make sure...  Do you wish to execute this script?

    Please enter [Y/y] / [N/n] here:  " yn 
    case $yn in
        [Yy]* ) sudo modprobe -r acer-wmi ; sudo rfkill unblock all ; echo "blacklist acer_wmi" | sudo tee /etc/modprobe.d/acer-wmi.conf ; clear ; echo ' ' ; echo ' ' ; echo 'DONE!' ; echo ' ' ; echo ' ' ; echo 'The WIFI Card should be working now!' ; echo ' ' ; echo ' ';;
        [Nn]* ) echo ' ' ; echo '    ⁓⁓⁓⁓⁓⁓⁓⁓⁓⁓⁓⁓⁓⁓⁓⁓⁓⁓⁓⁓⁓⁓⁓⁓⁓⁓⁓⁓⁓⁓⁓⁓⁓⁓⁓⁓⁓⁓⁓⁓⁓

    You have decided to cancel, this script will end immediately 
    without making any changes to your HP Envy x360.!

    '  ; exit;;
#        * ) echo "Please answer yes or no.";;
    esac


done

非常感谢您关注这个问题并帮助我!

~ 埃夫

答案1

除了done命令

done不是命令。

似乎存在误解:该关键字done并不意味着脚本已完成并可以结束执行。相反,它dowhile...do.意思是:当while条件为假时,执行关键字后的下一条指令done

exit也许您想要在用户选择时执行的命令列表末尾添加一个Y

更新:

我提到它exit只是因为它已经在[Nn]分支中使用,但那只会固定的脚本。使用break而不是exit按照建议戈登·戴维森而是一个更好的想法,代表改进,以便进一步开发脚本。

相关内容