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 ";;"),不知道哪里错了,求大虾指导
也就是多加三个空格
然后你再试试吧。。 参考技术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语法while语句until语句for语句select语句