1. quoting
shell会自动对通配符(wildcard)和变量(variable)做扩展,还会自动进行命令替换(command substitution),这个特性很方便;但是,有时我们并不想要这种扩展。 有三种方式可以控制这种扩展。 双引号(double quote):Variable(Yes), Wildcard(NO),Command Substitution(Yes) 单引号(single quote):Variable(NO),Wildcard(NO),Command Substitution(NO) backslash(\): 在双引号中用backslash可以让$成为一个普通字符,从而使shell不做自动扩展和命令替代。 e.g. :/home/James/mypro/shell# echo $(date) 2012年 05月 10日 星期四 10:53:07 CST :/home/James/mypro/shell# echo "$(date)" 2012年 05月 10日 星期四 10:53:13 CST :/home/James/mypro/shell# echo '$(date)' $(date) :/home/James/mypro/shell# echo "\$(date)" $(date)2. export语句将某个变量导出到其子进程的环境中。用-n来取消某个变量的“导出”性质。
e.g. :/home/James/mypro/shell# export MYENV="my env" :/home/James/mypro/shell# echo $MYENV my env :/home/James/mypro/shell# bash :/home/James/mypro/shell# echo $MYENV my env :/home/James/mypro/shell# localenv="local" :/home/James/mypro/shell# bash :/home/James/mypro/shell# echo $localenve.g.
:/home/James/mypro/shell# export | grep -i myenv declare -x MYENV="my env" :/home/James/mypro/shell# export -n MYENV :/home/James/mypro/shell# export | grep -i myenv 3. 获得用户输入 -p(输出提示),-t(输入超时) (和用户交互是很重要的!!!) e.g. :/home/James/mypro/shell# read -p "Enter Your Name: " name Enter Your Name: James :/home/James/mypro/shell# echo $name James 4. 数学运算 $((expression)) e.g. :/home/James/mypro/shell# echo $((10 * 5)) 50 :/home/James/mypro/shell# echo $((10**5)) 100000吐槽:其对数学运算的内置支持完全没有python好啊。以后什么任务要用到数学计算的,可以分离到python脚本里,然后从shell去调用python脚本。
5. 得到命令的一些infomation which command-name whereis command-name whatis command-name 6. 命令的一些操作 history -- 显示命令历史 Ctrl-r -- 反向查找命令 (比history | grep xxx方便) !! -- 重复上次命令 7. 判断一个string是否包含substring [[ "$string" =~ "$substring" ]]