shell编程写了一个case嵌套if和for的语句,一直报错,求大虾指教

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了shell编程写了一个case嵌套if和for的语句,一直报错,求大虾指教相关的知识,希望对你有一定的参考价值。

case $1 in
January|1) if[$2 = "-"];then
for((i=$1;i<=$3;i++));
do
cal i $4
done
;
else cal $1 $2
fi
;;
如上,报错 Syntax error: "then" unexpected (expecting ";;"),不知道哪里错了,求大虾指导

你将if[$2 = "-"];then改为if空格[空格$2 = "-"空格];then
也就是多加三个空格
然后你再试试吧。。
参考技术A 是不是多了个 ; ?很久没玩过脚本了,有些忘了。

shell脚本编程基础之case语句

基础简介

脚本编程分为:

面向过程          选择结构:if语句,单分支、双分支、多分支;case语句
        控制结构:顺序结构(默认)   
                 循环结构:for、while、until
面向对象

case语句结构

case VAR_NAME in
var_value1)           #value被当做字符一个一个进行比较的;可以使用a-z,A-Z,0-9,[abc]
  statement1
  ...
  ;;
var_value2)
  statement2
  ...
  ;;
*)
  statement
  ...
  ;;
esac

case示例

Example1:
#!/bin/bash
case $1 in
‘start‘)
   echo "start service...."
   ;;
‘stop‘)
   echo "stop service...."
   ;;
‘restart‘)
   echo "restart service....."
   ;;
‘status‘)
   echo "Running...."
   ;;
*)
   echo "`basename $0` (start|stop|restart|status)"     #`basename $0` 表示脚本本身名
   ;;
esac
当$1参数值为上面4个中的一个时,执行每个字符下的语句;如果上面哪个字符都不匹配,则执行 *) 下的语句

Example2:
#!/bin/bash
ADD=0
DEL=0
DEBUG=0
for i in `seq $#`;do
case $1 in
-v|--verbose)
   DEBUG=1         #输入指定字符,设置变量值,并且使用shift,把当前的$1踢掉,$2变为$1,$3变为$2;这样方便执行循环,这样case可以一直判断$1
   shift
   ;;
-h|--help)
   echo "Usage: `basename $0` -v|--verbose --add USER_LIST --del USER_LIST -h|--help"
   exit 7
   ;;
--add)
   ADD=1
   ADDUSER=$2
   shift
   ;;
--del)
   DEL=1
   DELUSER=$2     #此位置变量指定需要删除或者添加的用户名
   shift
   ;;
*)
   exit 8               #上面都不匹配,执行此条,防止一直循环判定不匹配的$1
   ;;
esac

if [ $ADD -eq 1 ];then
   for USER in `echo "$ADDUSER"|sed -n ‘s/,/ /gp‘`;do    #取出用户名作为循环的列表
       if id $USER &>/dev/null;then
           [ $DEBUG -eq 1 ] && echo "$USER exists"    #如果执行脚本时添加了-v,则用户存的话进行打印提示信息,不添加-v参数则不进行打印
       else
           useradd $USER
           [ $DEBUG -eq 1 ] && echo "create $USER finished"    #如果执行脚本时添加了-v参数,则创建完用户进行提示,不添加参数则不打印提示信息
       fi
   done
fi

if [ $DEL -eq 1 ];then         #如果执行脚本添加了--del参数,则上面的DEL变量值为1,值为1就进行下面的循环
   for USER in `echo "$DELUSER"|sed -n ‘s/,/ /gp‘`;do   #取出$2中的用户名
       if id $USER &>/dev/null;then
           userdel -r $USER
           [ $DEBUG -eq 1 ] && echo "delete $USER finished"    #执行脚本时添加了-v参数,则显示相关提示信息,反之则不显示
       else
           [ $DEBUG -eq 1 ] && echo "$USER not exists"   #执行脚本时添加-v参数,把DEBUG变量值变为1,则此条判断成立,执行后面的语句
       fi
   done
fi

done 
如果前面加上-v则显示添加过程,不添加-v就不显示,--add user1,xxxxx进行添加用户;--del user1,txwxx删除这些用户,-h查看帮助

以上是关于shell编程写了一个case嵌套if和for的语句,一直报错,求大虾指教的主要内容,如果未能解决你的问题,请参考以下文章

shell if case for 几个条件的混合使用

shell编程之if语法case语法while语句until语句for语句select语句

Shell编程

if for while until case select 命令

shell脚本编程基础之case语句

Shell编程Shell中多分支case条件语句