1. 获取脚本当前路径:
FILE_DIR=`echo $(cd $(dirname $0); pwd)`
2. shell整数计算可用expr,非整数计算可用awk内置函数实现:
四舍五入:
awk BEGIN'{printf("%d", 1.7+0.5)}'
保留小数:
awk BEGIN'{printf "%.2f\n", 2/3}'
3. (())
while read line
do
((lineNum++))
done < inputfile
4. 在文件中查找关键字时,用grep -c XXX 比grep XXX | wc -l 的效率要高,
但是查找进程时,ps -ef | grep XXX | grep -v grep |wc -l 才是对的,因为要过滤掉grep进程
5. grep -A4 '#!/bin/bash' dir.sh #-A4 代表显示前四行
6. cut命令
linux-0xvi:/opt/Program # echo abcdefghi | cut -b2-5
bcde
linux-0xvi:/opt/Program # echo abcdefghi | cut -c2-5
bcde
linux-0xvi:/opt/Program # echo abc:def:hij:kmn | cut -d: -f2-3
def:hij
7.linux捕获信号:
linux-0xvi:/opt/Program # cat signal.sh
#!/bin/bash
function handle
{
echo "received a signal"
}
trap 'handle' HUP INT QUIT TSTP
sleep 5
8.用stty和dd实现暂停
linux-0xvi:/opt/Program # cat press.sh
#!/bin/sh
function char
{
settty=$(stty -g)
stty raw
stty -echo
dd if=/dev/tty bs=1 count=1 2> /dev/null
stty echo
stty -raw
stty $settty
}
echo -n "press any key to continue..."
input=`char`
9. perl -e 'print time'
10. 一条命令建立目录树: mkdir -p test/{inc,src,help/{html,pdf,doc}}
11. 命令行下:ctrl+a 跳到行首,ctrl+e 跳到行尾
12. rm命令前面的两个单引号,或者一个反斜线\是什么含义?
有的系统会默认对一些常用命令做别名处理,例如alias ll='ls -l', alias rm='rm -rf'等等。如果用户不想使用别名,同时也不希望改变系统的别名设置,就可以在命令前面加上两个单引号,或者一个反斜线,表示取消别名.
$ alias rm='rm -rf'
$ ''rm foo.c
rm: remove write-protected regular file 'foo.c'? n
$ \rm foo.c
rm: remove write-protected regular file 'foo.c'? y
13. 如何处理一个以短横线-作为首字母命名的文件
有两种方式处理一个以短横线-作为首字母命名的文件,其一是在文件名之前加上两个短横线作为参数,其二是在文件名之前指定绝对路径或相对路径。
$ touch -- -foo.c #创建以短横线开头的测试文件
$ rm ./-foo.c #利用相对路径删除以短横线开头的测试文件
14. 如何添加指定用户的属组
usermod命令的-G选项是创建指定用户的属组列表,以前的属组列表会被删除。如果想要保留以前的属组列表,需要同时指定-aG选项。
$ sudo usermod -aG group_name user_name
15. () 使用子shell
比如 (cd ../../commlib/; make)
16. 脚本修改用户密码
useradd asgdbg -d /home/asgdbg
echo asgdbg:123456 |chpasswd
or
echo '123456'|passwd --stdin asgdbg
16. Makefile中创建目录: $(shell [ ! -d obj ] && mkdir obj)