shell常见使用误区

来源:互联网 发布:工业控制软件 编辑:程序博客网 时间:2024/04/30 06:05

[**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 ]
原创粉丝点击