Shell

1. shell 介绍

Shell ⼀个命令解释器,它接收应⽤程序/⽤户命令,然后调⽤操作系统内核。 Shell还是⼀个功能强⼤的编程语⾔,易编写、易调试、灵活性强

Linux提供的Shell解析器有

[root@test001 ~]# cat /etc/shells

/bin/sh

/bin/bash

/usr/bin/sh

/usr/bin/bash

/bin/tcsh

/bin/csh

 bash 和 sh的关系

sh -> bash

Centos默认的Shell解析器是bash

[root@test001 ~]# echo $SHELL

/bin/bash

2. 定义

2.1. 变量名的定义规则

(1)变量名称可以由字⺟、数字和下划线组成,但是不能以数字开头,环境变量名建议⼤ 写。 (2)等号两侧不能有空格

(3)在bash中,变量默认类型都是字符串类型,⽆法直接进⾏数值运算。

(4)变量的值如果有空格,需要使⽤双引号或单引号括起来。

2.2. 等号周围没有空格

在 Bash 中,不应该在定义变量时添加额外的空格。

Bash 将 name 视为命令⽽不是变量,因为添加了不必要的空格。 因此,定义变量的正确⽅法如下:

 name="Zhang"

2.3. 正确地定义数组

Bash中需要使⽤⼀对括号来包含所有元素

names=("Zhang" "Elon" "Bill")

Bash 不会将逗号视为分隔符,并且在 names 数组中只有⼀个元素 Yang,Elon,Bill ⽽不是预期的三个

2.4. 查看所有的变量

set

2.5. 取消变量的设置

unset 变量名

2.6. 将局部环境变量提升为全局

export 变量名

2.7. 正确选择引号

没有引号

⽤单引号

⽤双引号

默认情况下,Bash 中的每个值都是⼀个字符串。因此,如果不需要空格,就不需要使⽤任何引号。(同 样,它与其他语⾔有些不同,在其他语⾔中,您不能在没有引号的情况下定义字符串) 当需要使⽤引号时,请注意单引号和双引号之间的区别。 

总⽽⾔之,⼀对单引号内的字符串将始终被解释为它的本身。

2.8. 避免在命令中使⽤反引号

在 Bash 中,可以将命令的结果保存到变量中。

1file_list=`ls`

file_list=$(ls)

这⾥的最佳实践始终是使⽤第⼆种⽅法,尤其是在编写较⻓的脚本时。因为反引号和单引号看起 来很相似,有时可能会混淆它们。

2.9. 特殊的变量名

$n        功能描述:n为数字,$0代表该脚本名称,$1-$9代表第⼀到第九个参数,⼗以上的参数需要 ⽤⼤括号包含,如${10}

$*        功能描述:这个变量代表命令⾏中所有的参数,$*把所有的参数看成⼀个整体

$@        功能描述:这个变量也代表命令⾏中所有的参数,不过$@把每个参数区分对待

$?        功能描述:最后⼀次执⾏的命令的返回状态。如果这个变量的值为0,证明上⼀个        命 令正 确执⾏;如果这个变量的值为⾮0(具体是哪个数,由命令⾃⼰来决定),则证明  上⼀个命令执⾏ 不正确了。

$#        功能描述:获取所有输⼊参数个数,常⽤于循环

3. 运算符

3.1.1. 算数运算符

(1)“$((运算式))”或“$[运算式]”

(2)expr + , - , \*, /, % 加,减,乘,除,取余

注意:expr运算符间要有空格

3.1.2. 逻辑运算符

格式:[ 条件 ] 注意:[] ⾥⾯前后必须要有空格

结果:0 表示真 ⾮0表示假 (

1)两个整数之间⽐较

= 字符串⽐较 -lt

⼩于(less than)

-le ⼩于等于(less equal)

-eq 等于(equal)

-gt ⼤于(greater than)

-ge ⼤于等于(greater equal)

-ne 不等于(Not equal)

(2)按照⽂件权限进⾏判断

-r 有读的权限(read)

-w 有写的权限(write)

-x 有执⾏的权限(execute)

(3)按照⽂件类型进⾏判断

-f ⽂件存在并且是⼀个常规的⽂件(file)

-e ⽂件存在(existence)

-d ⽂件存在并是⼀个⽬录(directory)

(4)多条件判断(&& 表示前⼀条命令执⾏成功时,才执⾏后⼀条命令,|| 表示上⼀条命令执⾏ 失败后,才执⾏下⼀条命令) 

4. 正则表达式

正则表达式使⽤单个字符串来描述、 匹配⼀系列符合某个语法规则的字符串。 在很多⽂本编辑器⾥, 正则表达式通常被⽤来检索、 替换那些符合某个模式的⽂本。 在 Linux 中, grep,sed, awk 等⽂本

4.1. 常规匹配 处理⼯具都⽀持通过正则表达式进⾏模式匹配。

例如下⾯的命,会对/etc/passwd的每⾏内容进⾏匹配,将含有root的⾏输出,如图中红⾊的部分即为匹 配的内容

4.2. 常⽤的特殊字符串

特殊字符:^

^匹配⼀⾏的开头,如下,会匹配/etc/passwd中以root开头的⾏

特殊字符:$

$匹配⼀⾏的结尾,如下,会匹配出/etc/passwd中以bash结尾的⾏

特殊字符:.

.匹配⼀个任意字符,如下,可以匹配含有四个字符,其中第1个字符是r,第4个字符是t的⾏,中间两个 可以是任意字符

特殊字符:*

*不单独使⽤,他和上⼀个字符连⽤,表示匹配上⼀个字符0次或多次,如下,可以匹配第1个字符是r, 最后1个字符是t,中间可以包含任意数量的o

字符区间(中括号):[]

[]表示匹配某个范围内的⼀个字符,例如

[6,8] 匹配6或者8

[0-9] 匹配1个0-9的数字

[0-9]* 匹配任意⻓度的数字字符串

[a-z] 匹配1个a-z之间的字符

[a-z]* 匹配任意⻓度的字⺟字符串

[a-ce-f] 匹配a-z或者e-f之间的任意⼀个字符

 特殊字符:\

\表示转义,并不会单独使⽤,由于所有特殊字符都有其特定的匹配模式,当匹配某⼀特殊字符本身时 (例如,我想找出所有包含‘$’的⾏),就会碰到困难,此时就要将转义字符和特殊字符连⽤,来表示特 殊字符本身

7)扩展的正则表达式 这⾥说⼀下,有些语⾔中⽀持正则表达式的扩展语法,如{n,m}等等,对于这种,使⽤grep匹配的时候, 需要添加-E选项,否则⽆法识别这种语法。 ⽐如下⾯2⾏,匹配a-z中的任意字符2或者3次

5. 条件选择、判断

5.1. 条件选择 if

注意事项:

(1)[ 条件判断式 ],中括号和条件判断式之间必须有空格

(2)if后要有空格

 5.1.1. ⽤法格式

5.2. 条件判断 case

5.2.1. ⽤法格式

注意事项:

1) case⾏尾必须为单词“in”,每⼀个模式匹配必须以右括号“)”结束。

2) 双分号“;;”表示命令序列结束,相当于java中的break。

3) 最后的“*)”表示默认模式,相当于java中的default。

 5.3. 循环(四种)

5.3.1. for
5.3.1.1. ⽤法格式

5.3.2. while
5.3.2.1. ⽤法格式

循环控制条件;进⼊循环之前,先做⼀次判断;每⼀次循环之后会再次做判断;条件为“ true ” ,则 执⾏⼀次循环;直到条件测试状态为“ false ” 终⽌循环

5.3.3. until 循环
5.3.3.1. ⽤法

进⼊条件:循环条件为true ;退出条件:循环条件为false;刚好和while相反,所以不常⽤,⽤while就 ⾏。

5.3.4. select 循环与菜单

5.3.4.1. ⽤法

① select 循环主要⽤于创建菜单,按数字顺序排列的示菜单项将显示在标准错误上,并显示PS3 提示 符,等待⽤户输⼊

② ⽤户输⼊菜单列表中的某个数字,执⾏相应的命令

③ ⽤户输⼊被保存在内置变量 REPLY 中

④ select 是个⽆限循环,因此要记住⽤ break 命令退出循环,或⽤ exit 按 命令终⽌脚本。也可以按 ctrl+c退出循环

⑤ select 和 经常和 case 联合使⽤

⑥ 与for循环类似,可以省略 in list, 此时使⽤位置参量

 

分析: PS3 是 select 的提示符,⾃动⽣成菜单,选择5 break 退出循环。

5.4. 循环⾥的⼀些⽤法

5.4.1. 循环控制语句
5.4.1.1. 语法

continue :提前结束第N层的本轮循环,⽽直接进⼊下⼀轮判断;最内层为第1层 break :提前结 束第N层循环,最内侧为第1层

6. read 读取控制台输⼊

6.1. 语法

read(选项)(参数) 选项:

-p:指定读取值时的提示符;

-t:指定读取值时等待的时间(秒)。

参数 变量:指定读取值的变量名

7. ⾃定义函数

语法

注意:

(1)必须在调⽤函数地⽅之前,先声明函数,shell脚本是逐⾏运⾏。不会像其它语⾔⼀样先编 译。

(2)函数返回值,只能通过$?系统变量获得,可以显示加:return返回,如果不加,将以最后⼀ 条命令运⾏结果,作为返回值。return后跟数值n(0-255)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值