以下是脚本
bash --version | head -n1
if [ "$1" == "now" ]
then
echo if now
execut job
else
echo else "_"$1"_" # make sure we are not picking any spaces
if [ condition ]
then
execut something else
fi
fi
./script now
if now
如果从交互式 shell 运行,则可按预期工作。但是,如果从 cron 调用,则 if 会转到 else 块
* * * * * root /home/user/./script now >> /tmp/log
cat /tmp/log
GNU bash, version 4.3.11(1)-release (x86_64-pc-linux-gnu)
else _now_
与“-eq”相同。
我是不是因为还没吃早餐而错过了一些简单的事情?
运行 Ubunt 14.04LTS。
答案1
因为语法只有一个相等:[ $a = $b ]
if [ ! $a = $b ]; then #with space in condition and need instruction between then and fi, else doesn't works
...Script to execute...
elif [ ! $a = $c ]; then
...Script to execute...
else
...Script to execute...
fi
条件性订单列表
[ $a = $b ] && return 1 || return 0 conditionnal alternative format
if [ $a = $b -o $b = $c ] -o mean OR
if [ $a = $b -a $b = $c ] -a mean AND
if [ $a = $b -o $b = $c ] || [ $a = $b -a $a = $c ] multiple conditionnal or
if [ $a = $b -o $b = $c ] && [ $a = $b -a $a = $c ] multiple conditionnal and
if [ -z $a ] is empty or null
if [ ! -z $a ] not equal to ""
if [ -n $a ] is not empty or null
if [ $a -eq $b ] equal (numeric)
if [ $a -ne $b ] not equal (numeric)
if [ $a -gt $b ] greater than (numeric)
if [ $a -ge $b ] greater or equal than (numeric)
if [ $a -lt $b ] lower than (numeric)
if [ $a -le $b ] lower or equal than (numeric)
if [ -d $a ] is a directory
if [ -e $a ] file exist
if [ -f $a ] is a file
if [ -g $a ] is group allowed for the file
if [ -r $a ] is readable
if [ -s $a ] file is not 0kb
if [ -u $a ] is user allowed for file
if [ -w $a ] is writable
if [ -x $a ] is executable
使用 bash 进行更多操作
if [[ "$a" =~ "$b" ]] match (reg exp)
if [[ $a == *$b* ]] match (glob)
if [ "${a/$b}" = $a ] match (string)
if [ -z "${a##*$b*}" ] match (string, work with dropbox !)
if [ ${a/$b} = $a ] match (string)
答案2
将@gordon-davisson 的评论作为答案,因为这为我解决了这个问题:
在 shell 脚本顶部添加“shebang”行:
#!/bin/bash
这将告诉操作系统这是一个 bash 脚本,需要以这种方式进行解释。然后它将与if [ "$a" == "$b" ]
诸如此类的东西一起工作。