【shell】常用语法 -b file -c file -f file-d file -x file

 

 【shell】常用语法 -b file  -c file  -f file-d file  -x file     

一、test条件判断

1test文件测试:

-b file     若文件存在且是一个块特殊文件,则为真

-c file     若文件存在且是一个字符特殊文件,则为真

-d file     若文件存在且是一个目录,则为真

-e file     若文件存在,则为真

-f file     若文件存在且为一个规则文件,则为真

-g file     若文件存在且设置了SGID位的值,则为真

-h file     若文件存在且为一个符号链接,则为真

-k file     若文件存在且设置了“sticky”位的值,则为真

-p file     若文件存在且为一已命名管道,则为真

-s file     若文件存在且其大小大于零,则为真

-u file     若文件存在且设置了SUID位的值,则为真

-r file     若文件存在且可读,则为真

-w file     若文件存在且可写,则为真

-x file     若文件存在且可执行,则为真

-o file     若文件存在且被有效用户ID所拥有,则为真

 

2test字符串比较

-z string         string长度为0,则为真

-n string         string长度不为0,则为真

string1 = string2    若两个字符串相等,则为真

string1 != string2   若两个字符串不相等,则为真

 

3test命令的数字比较操作符

int1 -eq int2      int1等于int2,则为真

int1 –ne int2      int1不等于int2,则为真

int1 –lt int2      int1小于int2,则为真

int1 –le int2      int1小于等于int2,则为真

int1 –gt int2      int1大于int2,则为真

int1 –ge int2      int1大于等于int2,则为真

 

4test复合表达式

! expr                     expr为假则复合表达式为真。expr可以是任何有效的测试表达式

expr1 -a expr2           expr1expr2都为真,则为真

expr1 -o expr2           expr1expr2有一个为真,则为真

 

二、shell里的特殊变量

# sh /usr/local/bkeep/shell.sh 001 002

I'm $0 is:/usr/local/bkeep/shell.sh        //正在被执行脚本的名字;`basename $0`

I'm $1 is:001                //$1接收到的参数

I'm $2 is:002                //$2接收到的参数

I'm $# is:2                   //总共接收到的参数个数

I'm $* is:001 002         //把接收到的参数全部打印出来

I'm $@ is:001 002        //同上

I'm $? is:0                   //上一个脚本的退出状态“0代表正常;“1非正常退出

I'm $$ is:24137            //当前执行脚本的进程ID

I'm $! is:                     //前一个后台进程的id

 

三:其他

1.返回值 #?

cd dir

echo "$?"

如果dir存在,则返回0,不存在则返回1. 其他函数的命令也是一样,比如diff,等等。

 

每个命令都会返回一个 exit 状态(有时候也叫return 状态).成功返回0,如果返回一个非0 值,通
常情况下都会被认为是一个错误码.一个编写良好的UNIX 命令,程序,和工具都会返回一个0 作为
退出码来表示成功,虽然偶尔也会有例外.

同样的,脚本中的函数和脚本本身都会返回退出状态.在脚本或者是脚本函数中执行的最后的命
令会决定退出状态.在脚本中,exit nnn 命令将会把nnn 退出码传递给shell

 

$?读取最后执行命令的退出码.函数返回后,$?给出函数最后执行的那条命令的退出码.这种给
函数返回值的方法是 Bash 的方法.对于脚本来说也一样.总之,一般情况下,0 为成功,非0 失败W

 

 2 .

$ 变量替换操作符
只有在变量被声明,赋值,unset 或exported 或者是在变量代表一个signal 的时候,
变量才会是以本来的面目出现在脚本里.变量在被赋值的时候,可能需要使用"=",
read状态或者是在循环的头部.
在""中还是会发生变量替换,这被叫做部分引用,或叫弱引用.而在''中就不会发生变
量替换,这叫做全引用,也叫强引用.这两个符合在同一个按键上。具体见第5 章的讨论.
注意:$var 与${var}的区别,不加{},在某些上下文将引起错误,为了安全,使用2.

 

还有一个按键在左上角,即按键1的左边。此按键有下面的作用。即将ls -l的结果传给a

17 a=`ls -l` # 把ls -l 的结果给a
18 echo $a # 别忘了,这么引用的话,ls 的结果中的所有空白部分都没了(包括换行)
19 echo
20 echo "$a" # 这么引用就正常了,保留了空白

 或者直接

echo "$(ls -l)" 也可以取出目录

 

3.

在read 命令状态中
30 echo -n "Enter \"a\" "
31 read a
32 echo "The value of \"a\" is now $a."
33
34 echo
35

这个方法可以接受键盘输入到a中。

 

 4.

在一个双引号中直接使用变量名,一般都是没有问题的.它阻止了所有在引号中的特殊字符的
重新解释--包括变量名[2]--但是$,`和\除外.[3]保留$,作为特殊字符的意义,是为了能够在双
引号中也能够正常地引用变量("$var").这样在""中可以使用变量所表达的值(Example 4-1).
使用""来防止单词分割.[4]如果在参数列表中使用双引号,将使得双引号中的参数作为一个参
数.即使双引号中的字符串包含多个单词(也就是包含空白部分),也不会变为多个参数,如:
1 variable1="a variable containing five words"
2 COMMAND This is $variable1 # COMMAND 将以7 个参数来执行
3 # "This" "is" "a" "variable" "containing" "five" "words"
4
5 COMMAND "This is $variable1" # COMMAND 将以1 个参数来执行

 

5.赋值的方法

--------------------------------------------------------

a:C风格的赋值
7 (( a = 23 )) # 给一个变量赋值,从"="两边的空格就能看出这是c 风格的处理.
8 echo "a (initial value) = $a"
9
10 (( a++ )) # 变量'a'后加1,C 风格.
11 echo "a (after a++) = $a"
12
13 (( a-- )) # 变量'a'后减1,C 风格.
14 echo "a (after a--) = $a"

 ------------------------------------------------

37(( t = a<45?7:11 )) # C 风格的3 元操作.
38 echo "If a < 45, then t = 7, else t = 11."
39 echo "t = $t " # Yes!

---------------------------------------------------

18 LIMIT=10
19
20 for ((a=1; a <= LIMIT ; a++)) # Double parentheses, and "LIMIT" with no "$".
20 for ((a=1; a <= LIMIT ; a++)) # 双圆括号, 并且"LIMIT"变量前边没有 "$".
21 do
22 echo -n "$a "
23 done

--------------------------------------------

b:let

4 a=2334 # 整型
5 let "a += 1"   #不加双引号也可以
6 echo "a = $a "  # a = 2335

--------------------------------------------------------------------

c:取变量

5 a=2334

6 a=$(($a+1))

7 echo "$a"   #a=2335

 ------------------------------------------

你可能感兴趣的:(shell,String,File,脚本,command,Signal)