shell脚本容易出错的地方

在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'

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值