shell学习笔记(一)

1.特殊文件:/dev/null与/dev/tty

/dev/null:bit bucket(位桶),传送到此文件的数据都会被系统丢掉。相当于当程序将数据写到此文件时,会认为>已经完成写入的操作,但实际上是把数据丢到了垃圾桶,什么事情都没有做。当你需要命令的退出状态,而非是它的输出,此功能十分有用。
例如:测试一个文件是否含有某个模式时
if grep pattern file > /dev/null
then
...... 找到模式时
else
......没有匹配到
fi
/dev/tty :当程序打开此文件时,unix会自动将它定向到一个终端,在程序必须读取人工输入时有用。


2.位置参数:$0,$9,$[10]...

指的是shell脚本的命令行参数。位置参数是shell的一种特殊的变量,用于运行shell的时候向程序传递参数;
变量 $[nn] 表示第 nn 个位置参数;如不使用花括号,变量 $nn 的值不是第 nn 个位置参数的值,而是第 n 个位置参数的值后面加上 n;

命令行:sh test.sh 1 2 3 4 5 6 7 8 9

就是在向shell程序传递1-9,分别传递给程序中$1-$9,程序中就可以用到这些值了,因为跟位置有关系,所以叫位置参数。


3 if-elif-else-fi语句

在shell中用 if then elif else fi实现分支控制,有三种if......else 语句:

  • if.......fi语句
    if [ expression ]
    then
    Statement(s) to be executed if expression is true
    fi
    expression 返回 true,then 后边的语句将会被执行;如果返回 false,不会执行任何语句。

if命令的参数组成一条子命令,如果该子命令的exit states (退出状态)为0,表示为真,执行then后面的子命令。非0,为假,则会执行elif,else,或者fi后面的子命令。

  • if ... else ... fi 语句的语法:
    if [ expression ]
    then
    Statement(s) to be executed if expression is true
    else
    Statement(s) to be executed if expression is not true
    fi

如果 expression 返回 true,那么 then 后边的语句将会被执行;否则,执行 else 后边的语句。

  • if ... elif ... fi 语句

if ... elif ... fi 语句可以对多个条件进行判断,语法为:
if [ expression 1 ]
then
Statement(s) to be executed if expression 1 is true
elif [ expression 2 ]
then
Statement(s) to be executed if expression 2 is true
elif [ expression 3 ]
then
Statement(s) to be executed if expression 3 is true
else
Statement(s) to be executed if no expression is true
fi
哪一个 expression 的值为 true,就执行哪个 expression 后面的语句;如果都为 false,那么执行else语句。

注意:if与[]之间有空格。[与expression之间要有空格,[与;之间不需要空格,命令和参数之间必须用空格隔开。


4.逻辑的NOT、AND、与OR

有时以否定状态表示if的条件匹配:

  • if ! grep pattern file >/dev/null
    then
    ..................
    fi

测试多个子条件:

  • if grep pattern1 filename && grep pattern2 filename
    then
    ..............................
    fi

shell会先执行 第一个,成功推出,执行第二个。两个都成功,整个语句成功,执行then后面的子命令

|| 同&&用法一样,只不过有一个成功,就视为条件语句成功。


5.test命令

test命令可以处理shell脚本里各类的工作,产生的并不是一般的输出,而是可使用的退出状态。test理解成测试命令即可。test命令另一种用法较为常见[.....]

if test "$str1"="$str2"
then
................
fi
if [ "$str1"="$str2"]
then
................
fi

这两种用法一样,通常使用后一种。

test主要用来测试文件属性,比较字符串及数字.

-d file file是目录
-e file file存在
-f file file 是一般文件
.......
s1 -eq s2 相等
-ne 不等
n1 -lt n2 小于
-gt 大于
-le 小于等于
-ge 大于等于

注意:在字符串比较的时候,有一种使用方式

if [ "X$str1"="Xgr" ]
在字符串前置字母X,为了防止字符串为空,导致test被混淆。

你可能感兴趣的:(shell学习笔记(一))