请教:12.04 bash数组赋值写法改了吗?

sh/bash/dash/ksh/zsh等Shell脚本
回复
头像
szl1997
帖子: 292
注册时间: 2009-11-24 14:12

请教:12.04 bash数组赋值写法改了吗?

#1

帖子 szl1997 » 2012-12-13 18:06

原来一直用的10.04,conky里有个天气脚本一直没有问题。升级到12.04后天气脚本不能用了,脚本运行不了。发现提示数组赋值语法错误。比如写成
a=("hello" "hi")终端运行会提示Syntax error: "(" unexpected错误。小白一个,根本不懂脚本怎么写,上网查了资料数组赋值好像就是这样写的啊?
男儿心比铁,纵死亦千钧!
tusooa
帖子: 6548
注册时间: 2008-10-31 22:12
系统: 践兔
联系:

Re: 请教:12.04 bash数组赋值写法改了吗?

#2

帖子 tusooa » 2012-12-15 0:10

把完整的腳本拿出來

代码: 全选

] ls -ld //
头像
szl1997
帖子: 292
注册时间: 2009-11-24 14:12

Re: 请教:12.04 bash数组赋值写法改了吗?

#3

帖子 szl1997 » 2012-12-15 13:12

#!/bin/bash
#!/bin/bash
#需要安装 w3m
#城市代码可在 http://wap.weather.com.cn/wap/search.shtml 上查询,是个9位的数字
#编写:xzap ([email protected])
#请到http://wap.weather.com.cn/wap/search.shtml输入要查询的城市名称
#然后在地址栏找到九位数字填入下面的wid后面
#如我本地的http://wap.weather.com.cn/wap/101210302/h24.shtml

#=============废话结束,开始========================
#城市编码
Wid=101210302
#天气信息存放位置
wfile="/dev/shm/weather"
usage(){
echo -e "\tUsage: `basename $0` 帮助文件"
cat <<EOF

=============下面是说明===============

主要就是根据参数来在conky中输出需要的信息
如:tianqi -riqi
不带参数输出完整信息

-riqi 这个是输出日期的
-nongli 显示农历
-chengshi 查询的城市
-tianqi 天气
-qiwen 温度
-fengxiang 风向
-icon 显示的图标
-mingtian 显示明天的天气
-houtian 显示后天的天气
-dahoutian 显示大后天的天气
-dadahoutian 显示大大后天的天气


=============说明结束================

EOF
}
#获取天气数据到$wfile函数
GET_WEATHER() {
[ -z "${Wid}" ] && \
echo "请到http://wap.weather.com.cn/wap/search.shtml输入要查询的城市名称,获得wid填入代码开头位置中。" && exit
w3m -dump http://wap.weather.com.cn/wap/weather/${Wid}.shtml \
|sed 's/\[.*\]//g'|sed 's/^ *//g' |sed '/^$/d' |sed -n '1,17p'>$wfile
}
#检测天气信息文件是否存在,不存在创建
[ -e "$wfile" ] || GET_WEATHER
#检测天气信息文件是否过期,以小时为单位检测
ft=`date +%Y%m%d%H -r $wfile`
nt=`date +%Y%m%d%H`
if [ $ft -ne $nt ] ;then GET_WEATHER;fi

#获取天气图标函数
GET_WEATHER_ICON() {
local tmp weathercn index
WeatherCN=("晴" "多云" "阴" "雨" "雷阵雨" "雾" "雪" "雨夹雪")
WeatherEN=("a" "c" "e" "h" "i" "d" "j" "k")

tmp="`cat $wfile|sed -n '4p'|awk '{print $1}'`"

j=0; k=0
for i in ${WeatherCN[@]}; do
[ "${tmp//$i}" != "$tmp" ] && weathercn[$j]="$i" && index[$j]="$k" && ((j++))
((k++))
done
[ "${#weathercn[@]}" -eq 0 ] && Weather[0]="unknown"
[ "${#weathercn[@]}" -eq 1 ] && Weather[0]="${WeatherEN[${index[0]}]}"&& w_icon="${Weather[0]}"
[ "${#weathercn[@]}" -eq 2 ] && \
if [ "`echo $tmp|grep "${weathercn[0]}转"`" ];then
Weather[0]="${WeatherEN[${index[0]}]}"
Weather[1]="${WeatherEN[${index[1]}]}"
w_icon="${Weather[0]}${Weather[1]}"
elif [ "`echo $tmp|grep "${weathercn[1]}转"`" ];then
Weather[0]="${WeatherEN[${index[1]}]}"
Weather[1]="${WeatherEN[${index[0]}]}"
w_icon="${Weather[0]}${Weather[1]}"
else
Weather[0]="${WeatherEN[${index[1]}]}"
w_icon="${Weather[0]}"
fi
[ "${#weathercn[@]}" -eq 3 ] && \
{
Weather[0]="${WeatherEN[${index[0]}]}"
Weather[1]="${WeatherEN[${index[2]}]}"
w_icon="${Weather[0]}${Weather[1]}"


}
echo $w_icon
}

case $1 in
-riqi)

cat $wfile |sed -n '2p'
shift
;;
-nongli)
w3m -dump http://wap.weather.com.cn/wap/|sed -n '3p'|sed 's/.*\[\(.*\)\]/\1/g'
shift
;;
-chengshi)
cat $wfile |sed -n '1p'
shift
;;
-tianqi)
cat $wfile|sed -n '4p'|awk '{print $1}'
shift
;;
-qiwen)
cat $wfile|sed -n '4p'|awk '{print $2}'
shift
;;
-fengxiang)
cat $wfile|sed -n '5p'
shift
;;


-icon)
GET_WEATHER_ICON


shift
;;
-mingtian)

cat $wfile|sed -n '7p'

shift
;;
-houtian)
cat $wfile|sed -n '10p'


shift
;;
-dahoutian)
cat $wfile|sed -n '13p'


shift
;;
-dadahoutian)
cat $wfile|sed -n '16p'


shift
;;
-h|--help)
usage
;;
*)
echo "使用`basename $0` -h 或者`basename $0` --help 查看帮助"
echo
cat $wfile

;;
esac
男儿心比铁,纵死亦千钧!
头像
szl1997
帖子: 292
注册时间: 2009-11-24 14:12

Re: 请教:12.04 bash数组赋值写法改了吗?

#4

帖子 szl1997 » 2012-12-15 13:15

把这两行注释掉脚本就能运行了。不注释就报错。我单写了个脚本只要有类似那两行的的数组赋值就报错。
男儿心比铁,纵死亦千钧!
头像
szl1997
帖子: 292
注册时间: 2009-11-24 14:12

Re: 请教:12.04 bash数组赋值写法改了吗?

#5

帖子 szl1997 » 2013-01-01 18:14

原因是我用sh运行了bash脚本。。。 :em06
男儿心比铁,纵死亦千钧!
头像
szl1997
帖子: 292
注册时间: 2009-11-24 14:12

Re: 请教:12.04 bash数组赋值写法改了吗?

#6

帖子 szl1997 » 2013-01-22 16:44

好像12.04不管脚本里指定用什么shell默认都用dash执行导致的。
男儿心比铁,纵死亦千钧!
回复