Shell 的一些笔记
if -e and -n的意思?
如果目标不为 null 则返回 true
-e returns true if the target exists. Doesn't matter if it's a file, pipe, special device, whatever. The only condition where something may exist, and -e will return false is in the case of a broken symlink.
For example:
$ ln -s foo bar
	
$ [ -e foo ]; echo $?
1
	
$ touch bar
	
$ [ -e foo ]; echo $?
0
In bash you can do help test to see what test options you have.
[ is usually part of your shell. In bash the options and behaviors are defined by bash. It is also kind of a synonym for test. In bash you can do help test to see all the options it supports.
The only real difference between [ and test should be that [ requires a ] after your arguments, whereas test does not. They otherwise work the same, [ -e foo ] is equivalent to test -e foo.
There is also /usr/bin/[ for shells which do not have [ built in. There is no man page for this though. But there is also a /usr/bin/test, and my system does have a man test which covers the options. I haven't tested, but I'd bet all the options supported by /usr/bin/test work on /usr/bin/[.
| Primary | Meaning | 
|---|---|
| [ FILE1 -ef FILE2 ] | True if FILE1 and FILE2 refer to the same device and inode numbers. | 
| [ -o OPTIONNAME ] | True if shell option "OPTIONNAME" is enabled. | 
| [ -z STRING ] | True of the length if "STRING" is zero. | 
| [ -n STRING ] or [ STRING ] | True if the length of "STRING" is non-zero. | 
More details: Introduction to if
Tests
- 比较操作符
 
整型比较符:
| 操作符 | 说明 | 例子 | 
|---|---|---|
| -eq | 相等 | if [ "b" ] | 
| -ne | 不相等 | |
| -gt | 大于 | |
| -ge | 大于或等于 | |
| -lt | 小于 | |
| -le | 小于或等于 | |
| < | 小于 | (("b")) | 
| <= | 小于或等于 | |
| > | 小于 | |
| >= | 大于或等于 | 
字符串比较符:
| 操作符 | 说明 | 例子 | 
|---|---|---|
| = | 等同 | |
| == | 相当于= | |
| != | 不相同 | |
| < | if [[ "b" ]] if [ "b" ]  | 
|
| -z | 字符串为 null | if [ -z "$s" ] | 
| -n | 字符串不为 null | 
How to exit if a command failed?
http://stackoverflow.com/questions/3822621/how-to-exit-if-a-command-failed
If you want that behavior for all commands in your script, just add
 set -e 
 set -o pipefail
at the beginning of the script. This pair of options tell the bash interpreter to exit whenever a command returns with a non-zero exit code.
This does not allow you to print an exit message, though.
Quoting Variables
双引号"" 的作用是使里面的字符除了`\之外都不作解析,因此在使用变量variable 的时候尽量加上双引号,以减少符号的解析和防止误解析。
单引号'' 则不会解析里面的$字符。
Exit and Exit Status
每个命令都会返回退出状态,成功的命令返回状态0,而失败的命令则返回非零。
$?获取前面最后一条命令的退出状态。
Grep
Convert binary file to string and search string.
strings <file_path> | grep "<string>"
Find more files to search the string.
find . -name "*.zip" | xargs string | grep "string"
The End