我是靠谱客的博主 花痴皮卡丘,最近开发中收集的这篇文章主要介绍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'

最后

以上就是花痴皮卡丘为你收集整理的shell脚本容易出错的地方的全部内容,希望文章能够帮你解决shell脚本容易出错的地方所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(59)

评论列表共有 0 条评论

立即
投稿
返回
顶部