我正在编写我的第一个 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
并不意味着脚本已完成并可以结束执行。相反,它do
是while...do
.意思是:当while
条件为假时,执行关键字后的下一条指令done
。
exit
也许您想要在用户选择时执行的命令列表末尾添加一个Y
。
更新:
我提到它exit
只是因为它已经在[Nn]
分支中使用,但那只会固定的脚本。使用break
而不是exit
按照建议戈登·戴维森而是一个更好的想法,代表改进,以便进一步开发脚本。