如果在shell脚本else语句(if else statement in shell script

2019-10-29 13:18发布

我有这样的脚本,它取决于你把作为输入参数不同的事情:

        #!/bin/bash
cadena="ls -alis"
while [ $# -e 0 ]
do
    case $1 in
        -p) [ $cadena = "$cadena | grep $2" ] ;;
        -o) [ if [ $2 = 'mida' ] then
                $cadena="$cadena -lS"
              elif [ $2 = 'inode' ] then
                $cadena="$cadena | sort -t 1" 
              fi
            ] ;;
        -d) [ if [ `expr substr $2 1 1`” = '/' ] then
                $cadena="$cadena $2"
              elif [ `expr substr $2 1 1`” != '/' ] then
                $cadena="$cadena `pwd`/$2" 
              fi
            ] ;;
        -s) [ $cadena="$cadena > $2" ] ;;
        shift 2
    esac
done
$cadena

更新的代码case 。 该错误是相同的一个开始,在与线9 elif [ $2 = 'inode' ] then声明,它说,不正确的令牌。

Answer 1:

  1. 不要混用单括号符号[ ]== ,这是[ ... = ... ][[ ... == ... ]]

  2. 你并不需要两个shift S,你可以shift 2代替(如果这是你要真的是)。

  3. 您可以更换外if与可读性的开关,避免嵌套if烂摊子:

     case $1 in -p) [...] ;; -o) [...] ;; -d) [...] ;; -s) [...] ;; *) [...] ;; esac 
  4. 你会想读BashFAQ / 050又名我想在一个变量把一个命令,但是复杂的情况下总是失败! 。



Answer 2:

至少,你需要一个fi关闭每个这些内部的if语句。

脚本的第一行有空间之前#! 。 如果真的样子,那么你可能是捡了一个不同的外壳。

但语法错误是由具有引起then在同一行作为if 。 壳只在一条线或等效(例如,分号之后)的开头识别保留字。 所以你要:

if [ $2 = 'mida' ]
then

要么

if [ $2 = 'mida' ]; then


文章来源: if else statement in shell script