概述
在shell脚本中,常常会遇到一些容易出错的地方,现在记录他们,以备后用。我尽量不列举错误的,因为我们只有记住正确的就可以了。
1. for循环
for file_name in `ls *.mp3`
do
done
2.cp "$file" "$target" 比不带双引号的更安全。
3.条件判断if的时候,使用[ $foo = "bar" ]不如
[ "$foo" = "bar" ]安全。
4.[ "$foo" = bar && "$bar" = foo ] //错误
[ bar = "$foo" -a foo = "$bar" ] // 正确
[ bar = "$foo" ] && [ foo = "$bar" ] // 正确
[[ $foo = bar && $bar = foo ]] // 正确
5.变量比较
[ $foo > 7 ] // 错误
很可惜 [[ 只适用于字符串,不能做数字比较。数字比较应当这样写:
(( $foo > 7 ))
或者用经典的写法:
[ $foo -gt 7 ]
6.if比较
if [ [ a = b ] && [ c = d ] ] //错误
同样的问题,[ 不是 if 语句的一部分,当然也不是改变逻辑判断的括号。它是一个命令。可能C程序员比较容易犯这个错误?
if [ a = b ] && [ c = d ] //正确
7.
[ bar == "$foo" ] // 错误
[ 命令中不能用 ==,应当写成
[ bar = "$foo" ] && echo yes [[ bar == $foo ]] && echo yes
8.
for arg in $* //不安全
$*
表示所有命令行参数,所以你可能想这样写来逐个处理参数,但参数中包含空格时就会失败。如:#!/bin/bash # Incorrect version for x in $*; do echo "parameter: '$x'" done $ ./myscript 'arg 1' arg2 arg3 parameter: 'arg' parameter: '1' parameter: 'arg2' parameter: 'arg3'
正确的方法是使用
$@
。#!/bin/bash # Correct version for x in "$@"; do echo "parameter: '$x'" done $ ./myscript 'arg 1' arg2 arg3 parameter: 'arg 1' parameter: 'arg2' parameter: 'arg3'
最后
以上就是花痴皮卡丘为你收集整理的shell脚本容易出错的地方的全部内容,希望文章能够帮你解决shell脚本容易出错的地方所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复