我的问题是我不明白为什么当我运行脚本时如果我写“是”或“否”它总是说我要退出脚本。我知道它不承认$reply
和“是”相同,但为什么呢? (我是bash编程的新手)。谢谢!
#!/bin/bash
clear
echo 'This script will install: Firefox 17.0.1 (language: enGB or itIT or enUS) and flash 11 in Firefox17.0.1, continue?'
read reply
if (( "$reply" = "yes" )); then
pkill firefox
rm -rf /tmp/fox
mkdir /tmp/fox
cd /tmp/fox
rm -rf /opt/firefox/*
rm -rf /usr/lib/mozilla/plugins/*
rm -f /usr/share/icons/mozicon128.png
mkdir /usr/lib/mozilla/plugins
mkdir /opt/firefox
echo "Enter your language (exmp: it en us)"
read reply1
if (( "$reply1" = "it" )); then
wget ftp://ftp.mozilla.org/pub/mozilla.org/firefox/releases/latest/linux-x86_64/it-IT/firefox-17.0.1.tar.bz2
elif (( "$reply1" = "en" )); then
wget ftp://ftp.mozilla.org/pub/mozilla.org/firefox/releases/latest/linux-x86_64/en-GB/firefox-17.0.1.tar.bz2
else
wget ftp://ftp.mozilla.org/pub/mozilla.org/firefox/releases/latest/linux-x86_64/en-US/firefox-17.0.1.tar.bz2
fi
wget http://fpdownload.macromedia.com/get/flashplayer/pdc/11.2.202.258/install_flash_player_11_linux.x86_64.tar.gz
wget http://upload.wikimedia.org/wikipedia/commons/7/76/Mozilla_Nightly_icon_2011.png
tar -xvf firefox-17.0.1.tar.bz2
tar -xvf install_flash_player_11_linux.x86_64.tar.gz
cp -R firefox/* /opt/firefox
cp libflashplayer.so /usr/lib/mozilla/plugins/
rm -f /opt/firefox/icons/mozicon128.png
cp -f Mozilla_Nightly_icon_2011.png /opt/firefox/icons/mozicon128.png
echo "Reboot the system to show the new icon?"
read response
if (( "$response" = "yes" )); then
reboot
else
echo 'Installation Complete'
fi
else
echo "I'm quitting the script..."
exit
fi
答案 0 :(得分:6)
您正在使用算术表达式块(( ))
来比较字符串。随之而来的是混乱。
read -p 'This script will install: Firefox 17.0.1 (language: enGB or itIT or enUS) and flash 11 in Firefox17.0.1, continue?' reply
if [[ "$reply" = "yes" ]]; then
…
答案 1 :(得分:3)
双括号(( ... ))
与if/then
构造一起使用时,会根据对它们所包含的整数测试表达式的评估返回退出状态。例如,测试((5 == 5))
将评估为真(即0
)。
独立,双括号允许您使用算术评估,如i=$(( 2+3 ))
和/或c样式语法,如
(( i = 1 )) #or
(( i++ )) #or
for ((i=0;i<5;i++)); do ...; done
但是,在您的代码中,当您尝试评估变量比较表达式时,实际上是在针对c样式赋值进行测试。 (( "$reply" = "yes" ))
既不比较整数也不比任何其他值,只是将字符串"yes"
的数字转换分配给由$reply
的内容标识的变量,并将指定的值作为退出状态返回
yes
转换为0
。如果用户输入yes
作为回复,则效果将是作业
yes=0
鉴于此,if
语句仅测试整数值为非零,因此由于括号中的赋值为零,因此它将返回1
作为退出代码,表示false
,then
块不会被执行。除非用户输入非零整数值。
将括号更改为双括号[[...]]
,你会没事的。如果您希望使用=
或==
,则在这种情况下,运营商无关紧要。
if [[ "$reply" = "yes" ]]; then
如果需要更多详细信息,您可以在this网站上找到有用的答案。
答案 2 :(得分:0)
运行此脚本,它对我没有任何错误,让我的Flash播放器正常工作。
# Prepare Directory's
pkill firefox
mkdir /tmp/fox
cd /tmp/fox
rm -rf /opt/firefox/*
rm -rf /usr/lib/mozilla/plugins/*
rm -f /usr/share/icons/mozicon128.png
mkdir /usr/lib/mozilla/plugins
mkdir /opt/firefox
# Download Resources
wget http://ftp.mozilla.org/pub/mozilla.org/firefox/releases/latest/linux-x86_64/en-US/firefox-18.0.tar.bz2
wget http://fpdownload.macromedia.com/get/flashplayer/pdc/11.2.202.258/install_flash_player_11_linux.x86_64.tar.gz
wget http://upload.wikimedia.org/wikipedia/commons/7/76/Mozilla_Nightly_icon_2011.png
# Extract Resources
tar -xvf firefox-18.0.tar.bz2
tar -xvf install_flash_player_11_linux.x86_64.tar.gz
# Install
cp -R firefox/* /opt/firefox
cp libflashplayer.so /usr/lib/mozilla/plugins/
#Restart Backtrack to reload start menu icon's or goto menu editor and reselect icon
cp -f Mozilla_Nightly_icon_2011.png /usr/share/icons/mozicon128.png
# Done
echo 'Installation Complete'