如果和其他,不同的变量和相同的结果

时间:2013-01-05 06:20:25

标签: bash conditional sh

我的问题是我不明白为什么当我运行脚本时如果我写“是”或“否”它总是说我要退出脚本。我知道它不承认$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

3 个答案:

答案 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作为退出代码,表示falsethen块不会被执行。除非用户输入非零整数值。

将括号更改为双括号[[...]],你会没事的。如果您希望使用===,则在这种情况下,运营商无关紧要。

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'