linux中的test命令失效现象

linux中的test命令失效现象,第1张

不是test失效, 而是 test 命令没有得到足够的参数.

原因是shell 在解释命令时, 会"先"对命令行进行扩展, 使用变量实际的值替换到命令行中, 然后再执行命令.

上面unset name后, $name的值为空, 执行完命令行扩展后, 实际执行的是

test -z && echo "empty" || echo "not empty"

此时, shell 实际传给test 命令的参数只有一个 "-z",  这种情况下, test 的退出码总是0

所以在执行的时候, 使用双引号将变量名引起来是个好习惯, 这样命令行扩展后实际传给test的参数为2个(尽管第2个只是一个空字符串)

关于shell 的命令行扩展, 除了变量, 还有一些其它的工作,

见下例: a.sh

#!/bin/bash

echo $#

echo $@

执行 ./a.sh a{1,2,3} 输出为

./a.sh a{1,2,3}

3

a1 a2 a3

看起来是传给命令行一个参数 a{1,2,3}, 实际上执行完shell 扩展后, 传给a.sh 的参数是 a1 a2 a3 共3个参数.

关于shell 扩展的更多细节, 详见bash 的man page的 EXPANSION 这一节.

对于文件是否有读写权限,这个没有涉及

#!/bin/bash

read -p "please input the file name:" file

if [ ! -n "$file" ]

then

echo please input the file name please

exit 0

fi

ls $file >/dev/null 2>&1

if [ $? -eq 0 ]

then

echo file exist

cp $file $file.bak

vi $file

else

echo file not exist!

fi

1. test.shell脚本内容如下:

#!/bin/bash

name="Mike" # 定义name变量并赋值

echo ${name} # 输出name变量的值

date # 显示当前系统的日期和时间

cd /tmp # 切换到/tmp目录

pwd # 输出当前绝对路径

运行结果如下:

2. 运行脚本:sh test.shell  或者 chmod +x test.shell &&./test.shell # 变为可执行文件

如果帮到你,望采纳~


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/7940163.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-11
下一篇 2023-04-11

发表评论

登录后才能评论

评论列表(0条)

保存