shell常见使用误区


[**Aniya**]#pwd
/home/sysadmin/zhaoyj

创建文件
[**Aniya**]#for i in `seq 1 5`;do touch file$i;done

查看文件
[**Aniya**]#ls
file1  file2  file3  file4  file5  software

[**Aniya**]#for i in "ls file*";do du -sh $i;done
du: 无法访问 “ls”: 没有那个文件或目录
4.0K    file1
4.0K    file2
4.0K    file3
4.0K    file4
4.0K    file5

为什么错误呢?因为for...in语句是按照空白来分词的,包含空格的文件名会被拆 成多个词
用双引号也不行,它会将ls和file*分别当成一个词来处理,而不是使用它的执行结果
正确写法:
[**Aniya**]#for i in "`ls file*`";do du -sh $i;done
4.0K    file1
4.0K    file2
4.0K    file3
4.0K    file4
4.0K    file5
[**Aniya**]#for i in "file*";do du -sh $i;done
4.0K    file1
4.0K    file2
4.0K    file3
4.0K    file4
4.0K    file5
------------------------------------------------------------------------------------
以-开头的文件名在复制的时候比较特殊

[**Aniya**]#touch -- -file6

直接使用文件名,错误:
[**Aniya**]#cp -file6 /home/sysadmin/
cp:无效选项 -- e
请尝试执行“cp --help”来获取更多信息。

添加--选项
[**Aniya**]#cp -- -file6 /home/sysadmin/

如果系统不支持--选项,可以考虑使用相对路径:
[**Aniya**]#cp ./-file6 !$
cp ./-file6 /home/sysadmin/


[**Aniya**]#touch "file 1"
[**Aniya**]#ls -l
-rw-r--r-- 1 root root 0 12-25 00:06 file 1
[**Aniya**]#cp file\ 1 /home/sysadmin/               这里的反斜杠是转义的功能,因为空格在shell里面有实际的意义

------------------------------------------------------------------------------------
在条件判断中,经常会遇到字符串的判断,我们经常会忘记加双引号“”
通常的写法是:
[ $filename = “test.txt” ]
如果filename是个正常的变量,这种判断方法还可以,但是如果filename中还有空格或者以-开头,这种判断方式就有问题了
定义变量
[**Aniya**]#filename="file 1"

$filename不加双引号的情况下:
[**Aniya**]#if [ $filename != test.txt ];then echo $filename;fi
bash: [: too many arguments

$filename加上双引号:
[**Aniya**]#if [ "$filename" != test.txt ];then echo $filename;fi
file 1

[[$filename不加双引号,但是使用[[]]将变量括起来
[**Aniya**]#if [[ $filename != test.txt ]];then echo $filename;fi
file 1
------------------------------------------------------------------------------------
当有两个条件语句的时候,&&或者||符号的位置
错:[ $filename = “test.*”  && $filename != test.txt ]
对:[ $filename = “test.*” ] &&[ $filename != test.txt ]
------------------------------------------------------------------------------------
条件语句中对数字的判断
通病是:
[[ $num > 10 ]]
只可惜[[只适用于对字符串的判断,数字比较应该这样写
(( $num > 10 ))
或者是使用经典写法:
[ $num -gt 10 ]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值