linux详细入门教程(六)------linux Shell编程(2)

目录

一、shell 变量

        1、export

 二、控制结构

1、  test命令

 2、let命令

 3、[[ ]]

4、if语句

 5、case语句

 6、while语句

 7、until语句

 8、for语句

 9、break,continue,exit

10、select命令

 三、函数

 四、内置命令

1、eval

2、exec

3、readonly

4、 trap

 5、set

6、wait

五、shell程序调试


一、shell 变量

        1、export

缺省情况下,只有环境变量 (e.g. HOME, MAIL, PATH, and PWD)对所有的子进程可见。

                 让变量成为“环境变量”。一、定义变量;二、使用 “export”命令导出。

格式:  export [变量名]

                      也可以简写成一条语句:

                                export str=“parent shell variable”

                不带参数的export命令可以显示本进程的全部环境变量。

                在子进程中改变环境变量的值不会影响父进程中该变量的值。

 

 二、控制结构

    Bash具有一般高级程序设计语言所具有的条件控制结构、循环控制结构和函数定义与调用功能,如:if, for, while等。

条件测试
用于评估表达式的值以便进行条件控制。
条件测试 shell 变量的值、文件特性、命令退出状态等因素。
三个命令:
test [ ]
let

                              [[ ]]

1、  test命令

格式:  test expr or [ expr ]
如果表达式的值为 ,其退出状态为 0 (即成功),否则退出状态为非零值(即失败)。
使用方括号格式时, [ 右边和 ] 左边各需至少一个空格。
表达式中的变量最好用双引号括起来,如: test $a

                         文件属性测试

参数

功能

-d文件名

若文件存在并且是目录文件,则测试条件为真

-e 文件名

若文件存在,则测试条件为真

-f 文件名

若文件存在并且是普通文件,则测试条件为真

-L 文件名

若文件存在并且是一个符号连接,则测试条件为真

-p文件名

若文件存在并且是一个命名管道,则测试条件为真

-r文件名

若文件存在并且是用户可读的,则测试条件为真

-s文件名

若文件存在并且文件的长度大于0(即非空),则测试条件为真

-w文件名

若文件存在并且是用户可写的,则测试条件为真

-x文件名

若文件存在并且是用户可执行的,则测试条件为真

-O 文件名

若当前用户是文件的所有者,则测试条件为真

-G 文件名

若当前用户的组ID匹配文件的组ID,则测试条件为真

文件1 nt 文件2

若文件1比文件2新,则测试条件为真

文件1 ot 文件2

若文件1比文件2旧,则测试条件为真

                 字符串测试

参数

功能

-z str

如果字符串str的长度为0,即空串,则测试条件为真

-n str

如果字符串str的长度大于0,即非空串,则测试条件为真

str

如果字符串str不是空字符串,则测试条件为真

sl = s2

如果sl等于s2,则测试条件为真,“=”也可以用“==”代替

s1 != s2

如果s1不等于s2,则测试条件为真

s1 \< s2

如果按字典顺序s1s2之前,则测试条件为真

s1 \> s2

如果按字典顺序s1s2之后,则测试条件为真

                 数值(整数)测试

参数

功能

n1 eq n2

如果整数n1等于n2,则测试条件为真

n1 ne n2

如果整数n1不等于n2,则测试条件为真

n1 lt n2

如果n1小于n2,则测试条件为真

n1 le n2

如果n1小于或等于n2,则测试条件为真

n1 gt n2

如果n1大于n2,则测试条件为真

n1 ge n2

如果n1大于或等于n2,则测试条件为真

                 逻辑测试

用法

逻辑

[ expr1 –a expr2 ]

.

[ expr1 –o expr2 ]

.

test1 && test2

.

test2 || test2

.

[ !expr ]

.

!test

.

\(expr\)

改变优先级.

优先级

() > 条件测试运算符 > ! > -a > -o

 2、let命令

专门执行整数算术运算的命令。
形式:  let <expr> or ((expr))
表达式建议用双引号括起, 当表达式中有 shell 的特殊字符(如 | )时,必须用双引号将其括起来。
操作数只能是整数(按长整数进行求值)。
命名的参数在算术表达式中可直接用名称访问,前面不用带 $ 符号,也不需要对算术表达式中的操作符进行转义。
如果算术表达式求值为 0 ,则设置退出状态为 1 ;如果求值为非 0 值,则退出状态为 0
使用 “ $((expr))” 获得表达式的值而不是退出状态。

 

 3、[[ ]]

         同 “[]”, 但特殊字符不需要转义。

 在使用 = != 操作符时,复合命令“[[ ]]”可在字符串上进行模式匹配。

 

4、if语句

        语法

 

 if语句唯一可测试的内容是命令退出状态,也就是说,测试条件是一或多条命令。

 

 5、case语句

          语法

                

 

每个模式字符串后面可有一条或多条命令,其中最后一条命令必须以两个分号(即;;)结束。

case的退出状态(返回值)是整个结构中最后执行的那个命令的退出状态,若没有执行任何命令,则退出状态为零。

 

 模式字符串中可以使用通配符

 

 一个模式字符串中可包含多个模式,各模式之间以竖线(|)隔开,各模式是“或”的关系。

 

 6、while语句

  语法

        

 测试条件的使用方式和”if”语句一样。

 

 

 7、until语句

语法 

同 “while”, 但循环在测试条件为真时结束

 

 8、for语句

        

两种使用方式 : 值表方式 & 算术表达式方式
值表方式
语法

 循环变量的值依次取自<值表>

 

 

 循环变量的值也可取自从$1起的所有位置变量。

 

 

 值表也可以是文件正则表达式

 

 

算术表达式方式
语法

 C语言中for语句相似

 

 9、break,continue,exit

                break

语法 :    break [n]
退出循环体

         n为一整数,表示要跳出几层循环,默认值是1

 

 

 

continue
语法    continue [n]
跳过本次循环中在它之后的循环体语句。

 

                 exit

语法    exit [n]
立即退出正在执行的 shell 脚本,并设定退出状态。
如果未显式给出n 值,则退出状态为最后一个命令的执行状态。

10、select命令

用于菜单的设计。
语法:

                 

 如果省略[in word...],那么参数identifier就以位置参数($1,$2…)作为给定的值。

 

 三、函数

  语法

 

函数必须先定义后使用。

调用函数时,直接使用函数名,不必带圆括号,就像使用一般命令一样。

调用函数不会创建新的进程,而是在本shell脚本所属的进程内执行。

向函数传递数据须使用位置参数($1,$2)

local关键字定义只能用于本函数的局部变量。

语法  local var_name

可使用return命令在任意位置退出函数。

语法  return [n]

 

 

 四、内置命令

1、eval

格式  eval [参数…]

首先扫描参数,所有参数被读取并连接(扩展)成一个字符串,然后eval再将该字符串当成命令来执行。

 

2、exec

格式  exec [arg…]

在本Shell中执行由参数arg指定的命令,该命令将替代本Shell进程

 

 

3、readonly

格式  readonly [name]

标记给定的name(变量名)是只读的,等价于 “declare –r”

4、 trap

格式  trap [arg] [n]

用于捕获信号。

<n> 是要捕获的信号。 <arg>是捕获信号后要执行的命令。

用法

                为某些信号另外指定处理方式。

                 指定arg为空串以忽略信号   

                 不指定arg,把信号的动作恢复成原来系统默认的动作。

 

 5、set

3个功能

显示已定义的全部变量.

设置位置参数的值.

设置Shell脚本的执行选项(标志项).

设置执行选项标志

格式   set –[flag_char] set +[flag_char]

“-”表示打开该标志项,标志字符前使用“+”表示关闭该标志项。

常用的标志项

禁止路径名扩展,即禁用文件通配符。

读脚本但不执行,用来检查脚本的语法。

使各命令行在完成参数替换且执行该行命令之前,先显  示该行的内容。重显的命令行以“+”号表示。

使shell对以后各命令行都按原样先在屏幕上显示出来,  若是输出语句则随后输出相应结果。

6、wait

格式  wait [pid]

等待进程IDpid的进程终止,并报告终止状态。默认等待所有子进程。

wait命令的返回码始终是0

五、shell程序调试

 

IDE,使用原始方法。

不能正常运行的三种原因

运行环境问题.

使用非bash shell运行按bash语法书写的脚本。

PATH环境变量中没有包括“.”,直接运行当前目录下的脚本。

语法错误.

命令格式错误.

特殊符号未转义错误.

拼写错误.

括号、引号不成对错误.

逻辑错误.

使用echoprintf输出提示.

使用set命令打开“-x”或“-v”选项将Shell设置成跟踪模式.

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

重生之我是泰勒

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值