shell脚本基本知识点(TODO)

来源:互联网 发布:哈利波特电影 知乎 编辑:程序博客网 时间:2024/05/05 14:24

                     Shell 脚本学习

 

                    第六章 

 

1、环境变量

 1) 定义和取消环境变量

 

2)重要的环境变量

 PWD:当前路径

 OLDPWD:上一次的路径

  

 PATH:任何在PATH中的可执行文件都可以在Linux的任何目录下直接执行

 

 

HOME:当前用户的根目录,一般非根用户的HOME目录存放在/home下,根用户的HOME目录在/root下。

 

SHELL:默认的Shell值,一般是/bin/bash,表示当前的Shellbash Shell

USER:用户名

UID:用户ID

PPID:当前进程的父ID

 

4)位置参数

  $# 传递给shell脚本的参数数量

  $*(或$@) 传给给shell脚本所有的参数(从$1开始的)

  $$ 当前脚本运行的进程号

  $? 当前脚本执行的状态,0表示OK,非0OK 

5)Shell脚本的引用

   全引用:单引号’’ 中除了单引号外的所有的字符都是字面意义。

 

   部分引用:双引用”” 中除了美元符号($)和反引号(`)以及反斜线外,其他都是字面意义。

 

 

 

  注意:如果系统有多个单引号,按照输入的先后顺序匹配。(双引号也类似)

6)命令替换

   有两种方式:

   其一:用反引号(注意和单引号不是一样的哦)

   其二:用$()

 

   

 

 

 

 

 

                     

 

 

 

 

 

 

 

 

 

 

 

  第7章(退出、测试、判断及操作符)

1、 退出状态

    

状态值

含义

0

运行中未遇到任何问题

1-125

运行失败,脚本命令、系统命令错误或参数传递失败

126

找到了该命令,但无法执行

127

没找到该命令

>128

命令被系统强制结束

 

 

 

2、 测试结构

其一:Test expression

其二:[ expression ]

注意:1、返回0表示OK, 返回非0表示不OK。(与C语言相反)

  2、注意第二种结构expression前后各有空格!

 

   对于整数比较,格式为:

   Test “exp1” 符号 “exp2”,其中符号有

   

exp1 -eq exp2

相等

exp1 -ge exp2

大于等于

exp1 -gt exp2

大于

exp1 -le exp2

小于等于

exp1 -lt exp2

小于等于

exp1 -ne exp2

不等于

 

注意:1、整数比较运算符不适合于浮点数、字符串等。

    2、对于整数常量,0表示8进制,0x表示16进制,也可使用num#表示进制,譬如8#表示8进制,16#表示16进制,2#表示2进制。

      

   对于字符串比较,格式为:

string

-n string

-n string

String为空串则返回非0,非空串返回0

-z string

String为空串则返回0,非空串返回非0

string1=string2

字符串相等返回0,否则返回非0

string1!=string2

字符串不相等则返回0,否则返回非0

注意:1、这里非0,对于字符串比较来说是1

      2、注意字符串的空格,大小写对字符串比较有影响。

      3、在Shell中,字符串赋值和整数赋值没有区别。

 

 

 

 

 

   对于文件操作符,格式为:

-d file

file是目录则返回0

-e file

file 存在则返回0

-f file

file是普通文件则返回0

-r file

file 是进程可读文件则返回0

-w file 

file 是进程可写文件则返回0

-x file 

file 是进程可执行文件则返回0

-s file

file 文件长度非0则返回0

-L file  

file 是符号化链接则返回0

 

 

  对于逻辑运算符,格式为:

exp

exp 为假,返回0

exp1 -a exp2

exp1exp2同时为真,则返回0,不过若exp1为假,则不再计算exp2

exp1 -o exp2

有一个为真,则返回0,不过若exp1为真则不再计算exp2

 

注意逻辑表达式如果exp不是表达式,例如单纯的数字,则总是返回假。

 

 

 

条件判断语句

  1if结构

if  expression

then 

        command

command

...

fi

 

注意:如果expression后没有;号,则then要换行。

 

if  expression

then 

        command

command 

...

else 

command

command 

...

fi

 

if  expression1

then 

if/fi 结构

else 

if/fi 结构

fi

 

 

if  expression1

then 

if/fi 结构

elif expression2

then

if/fi 结构

else

if/fi 结构

fi

 

 

 

2) case 结构

case var in

var1)

command

...

command;;

var2)

command

...

command;;

varN)

command

...

command;;

*

 

command

...

command;;

 

4、运算符

运算符

举例

结果(或描述)

+

5+3

8

-

5-3

2

*

5*3

15

/

5/3

1

%

5%3

2

**(幂)

5**3

125

+=

v+=5

v=v+5

-=

v-=5

v=v-5

*=

v*=5

v=v*5

/=

v/=5

v=v/5

%=

v%=5

v=v%5

<<

v<<2

左移2

>>

v>>2

右移2

&

5&3

|

5|3

~

~5

^

5^3

异或

<<=

v<<=2

v=v<<2

>>=

v>>=2

v=v>>2

&=

v&=2

v=v&2

|=

v|=2

v=v|2

^=

v^=2

v=v^2

前置++

v++

先用后加

后置++

++v

先加后用

 

5、for循环

for  i  in 1 2 3 4 5

do

command

done 

 

或 

for  i  in  {1..5}

do

command

done 

 

for  i  in  {1..5..1}

do

command

done

 

for  i  in  $(seq 1 1 5)

do

command

done

 

注意:1for  i  in “”,列表这里是一个字符串,则$i为该字符串。

2、执行完for循环后,done后的i取列表最后一个元素,而非最后一个元素加1或下一个元素。(注意下列例子用””保留了空格或换行。)

 






 

原创粉丝点击