shell 编程小结

语法错误(一):

总是出现错误syntax error near unexpected token '$'\r''


原因分析:
因为你所处理的文件换行符是dos格式的"\r\n"
可以使用cat -v 文件名 来查看换行符是否是,如果是上述的,则行结尾会是^m
需要转换成linux/unix格式的"\n"
具体转换办法就是转换换行符
解决方法: sed 's/\r//' 原文件 >转换后文件


echo "Create the server`s workdir "
预防错误(二):
unexpected EOF while looking for matching ``'

解决方法: echo "Create the server workdir "

经典应用场景分析:

源码
echo "This program will help you to calculate "
echo "how many days before your birthday."
read -p "input your birthday in the next year: " date1
#declare -i date_d=`date --date="$date1" +%d`
declare -i date_s=`date --date="$date1" +%s`
declare -i date_now=`date +%s`
declare -i date_total_s=$(($date_s-$date_now))
declare -i date_df=$(($((date_total_s))/60/60/24))
if ["$(($date_s/3600/24))" -lt "$(($date_now/3600/24))"]; then
    echo "you have celebrated the birthday."
elif ["$(($date_s/3600/24" == "$(($date_now/3600/24))"]; then 
    echo "happy birthday!"
else 
    echo "$date_df  days  left."  #line 25
fi
错误:line 25:unexpected EOF while looking for matching '"'
原因分析:
if 判断表达式缺少必要的空格,方括号跟里面的表达式之间要有空格的。
-lt表示为数字比较,不需要加双引号,加了双引号表示字符串比较,字符串比较用= < >之类的比较符。
== 是C语法,shell语法对应的字符串比较操作符就是 = ;或者 外面的 [ ] 改为 [[ ]],就支持C语法了。
用 $(( )) 做算术运算,里面的变量名前的取值符号$可省略。

解决方法:
 
  
if [ $((date_s/3600/24)) -lt $((date_now/3600/24)) ]; then
    echo "you have celebrated the birthday."
elif [ $((date_s/3600/24)) -eq $((date_now/3600/24)) ]; then 
    echo "happy birthday!"
else 
    echo "$date_df  days  left."  #line 25
fi


语法错误(三):export: `dump/Android_Hi3716C_V200': not a valid identifier


export subdir=dtv kernel protocol codec graph guitool midp jsext dtvmx jvm shell  mediaplayer dump/${REAL_MMCP_PLATFORM}

原因分析:
其实REAL_MMCP_PLATFORM打开后就是Android_Hi3716C_V200

解决方法:
export subdir= $(echo   dtv kernel protocol codec graph guitool midp jsext dtvmx jvm shell  mediaplayer dump/${REAL_MMCP_PLATFORM} ;)
使用一个echo回显命令来过渡一下



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值