Linux shell bash脚本如果有条件

时间:2017-08-22 16:43:15

标签: linux bash shell conditional-statements

当我在我的服务器上运行它时,它可以工作。

if [[ "${Month}" -gt 12 ]] || [[ "${Day}" -gt 31 ]] || [[ "${Month}" -lt 0 ]] || [[ "${Day}" -lt 0 ]] || [[ "${Year}" -lt 0 ]] || [[ "${Year}" -gt 2050 ]]; then
    echo "Please enter Valid date choice."       
    exit 1
fi

但是当我的客户在他们的环境中运行时会产生语法错误。

bash-4.1$ ./port_generator.sh "/opt/device/server/scripts/Results" "2017-01-29"
./port_generator.sh: line 31: syntax error near unexpected token `||'
./port_generator.sh: line 31: `|| [[ "${Year}" -lt 0 ]] || [[ "${Year}" -gt 2050 ]]; then'

发布服务器成功案例:红帽企业Linux服务器版本6.5(圣地亚哥)
服务器故障发布是:Red Hat Enterprise Linux Server 6.7版(圣地亚哥)

2 个答案:

答案 0 :(得分:-1)

您的脚本应在顶部有一个shebang行:executing send 1st time row 42 The message is **None** #!/bin/bash。但那不是问题。如果是,则错误将指向第一个#!/usr/bin/env bash,而不是第四个。

您的实际脚本中是否有两个单独行的||语句?这将生成您正在看到的消息:

if

如果那就是你做的,不要。或者,如果您确实希望分割线,请使用if [[ "${Month}" -gt 12 ]] || [[ "${Day}" -gt 31 ]] || [[ "${Month}" -lt 0 ]] || [[ "${Day}" -lt 0 ]] || [[ "${Year}" -lt 0 ]] || [[ "${Year}" -gt 2050 ]]; then 结束第一行,以便解析器知道命令未完成。

||

答案 1 :(得分:-1)

你的脚本是否有一个shebang?运行脚本的客户是什么shell?你使用相同的shell吗?

netikras@netikras-xps ~ $ bash
netikras@netikras-xps ~ $ if [[ 3 -gt 1 ]]; then echo OK; fi
OK
netikras@netikras-xps ~ $ csh
% if [[ 3 -gt 1 ]]; then echo OK; fi
[[: No match.
% exit

并非所有shell都具有相同的语法。确保您和您的客户使用相同的shell。或者使用更多信息更新答案