一、初学Shell的常见问题
1. sh,csh,tcsh和bash有什么区别?
- sh全称 Bourne Shell,是UNIX最初使用的shell,平且在每种UNIX上都可以使用。
- bash全称 Bourne Again Shell,是sh的扩展,增强了一些特性。
- csh是sh的变种语法,语法类似于C,方便学习使用。
- tcsh是csh的扩展,增强了csh的一些特性。
2. shell脚本最上方的 #! /bin/csh 是什么意思?
#!是特殊表示符,/bin/csh 表示用bin目录下的csh解释器来执行程序。
所以也可以写 #!/bin/tcsh
3. source test.sh和 ./test.sh 直接执行脚本有什么区别?
source会将脚本的内容直接影响到父进程的(因为它不开辟新线程,可以说是直接在当前进程中加入脚本的执行内容)。所以你source之后,里面配置的变量都会加入到当前环境中,你可以在该shell中调用脚本中的变量!
而./test.sh以及test.sh是在当前进程下新开一个子shell进程运行这个脚本,当脚本运行完毕了,sh中设置的变量和子进程一起被销毁了!
4. shell脚本中$0 $1 $# $@ $* $? $ 分别有什么含义?
$# 是传给脚本的参数个数
$0 是脚本本身的名字
$1 是传递给该shell脚本的第一个参数
$2 是传递给该shell脚本的第二个参数
$@ 是传给脚本的所有参数的列表
$* 是以一个单字符串显示所有向脚本传递的参数,与位置变量不同,参数可超过9个
$$ 是脚本运行的当前进程ID号
$? 是显示最后命令的退出状态,0表示没有错误,其他表示有错误
二、好用但是难记的指令
1. 删除 .nfx000xxxxxxx文件
Step1: lsof .nfx000000xxxxx获取进程ID
Step2: kill -9 <ID>
2. 查看文件夹大小
du -h --max-depth=1
3. 批量修改文本
例:将一个文件夹下面所有.sv文件中的clks全部替换成clk
sed -i s/clks/clk/g *.sv *.v *.svh
sed -i "s/clks/clk/g" `grep clks -rl ./path`
4. 更改Linux窗口的分辨率
xrandr -s 1920x1080
5. 批量删除文件夹和子文件夹中的文件或者文件夹
find . -name '.svn' -exec rm -rf {} \;
6. 批量修改文件名称
rename 'old_string' 'new_string' *.sv