1、shell的概述

shell 是一种脚本语言

脚本:本质是一个文件,文件里面存放的是 特定格式的指令,系统可以使用脚本解析器 翻译或解析 指令 并执行(它不需要编译)

shell 既是应用程序 又是一种脚本语言(应用程序 解析 脚本语言)

shell命令解析器:

系统提供 shell命令解析器: sh ash bash

查看自己linux系统的默认解析:echo $SHELL

fabric 执行脚本 执行脚本语句_linux中写脚本一般用语言

fabric 执行脚本 执行脚本语句_fabric 执行脚本_02

fabric 执行脚本 执行脚本语句_linux中写脚本一般用语言_03

shell脚本是一种脚本语言,我们只需使用任意文本编辑器,按照语法编写相应程序,增加可执行权限,即www.cppcns.com可在安装shell命令解释器的环境下执行

2、脚本的调用形式

打开终端时系统自动调用:/etc/profile 或 ~/.bashrc

/etc/profile

此文件为系统的每个用户设置环境信息,当用户第一次登录时,该文

fabric 执行脚本 执行脚本语句_linux中写脚本一般用语言_04

3、shell语法初识

3.1、定义以开头:#!/bin/bash

#!用来声明脚本由什么shell解释,否则使用默认shell

fabric 执行脚本 执行脚本语句_fabric 执行脚本_05

3.2、单个"#"号代表注释当前行第一步:编写脚本文件

fabric 执行脚本 执行脚本语句_bash_06

第二步:加上可执行权限

chmod +x xxxx.sh

fabric 执行脚本 执行脚本语句_linux中写脚本一般用语言_07

第三步:运行

fabric 执行脚本 执行脚本语句_解析器_08

三种执行方式 (./xxx.sh bash xxx.sh . xxx.sh)

三种执行方式的不同点(./xxx.sh bash xxx.sh . xxx.sh)

./xxx.sh :先按照 文件中#!OMkIfDhp指定的解析器解析

如果#!指定指定的解析器不存在 才会使用系统默认的解析器

bash xxx.sh:指明先用bash解析器解析

如果bash不存在 才会使用默认解析器

.xxx.sh 直接使用默认解析器解析

三种执行情况:(重要)

fabric 执行脚本 执行脚本语句_解析器_09

注意:windows下 写脚本 在linux下执行 注意

fabric 执行脚本 执行脚本语句_fabric 执行脚本_10

执行结果:

fabric 执行脚本 执行脚本语句_fabric 执行脚本_11

将windows文件 转换成 unix文件

方法一:dos2unix 如果没有该插件 需要安装

sudo apt-get install dos2unix

dos2unix shell脚本

转换成功就可以执行运行

方法二:

需要用vi打开脚本,在最后一行模式下执行

:set ff=uni

fabric 执行脚本 执行脚本语句_linux中写脚本一般用语言_12

4、变量

定义变量

变量名=变量值

如:num=10

引用变量

$变量名

unset :清除变量值

fabric 执行脚本 执行脚本语句_shell脚本_13

运行结果:

fabric 执行脚本 执行脚本语句_解析器_14

从键盘获取值read

fabric 执行脚本 执行脚本语句_linux中写脚本一般用语言_15

运行结果:

fabric 执行脚本 执行脚本语句_shell脚本_16

案例:

在一行上显示和添加提示 需要加上-p

fabric 执行脚本 执行脚本语句_bash_17

运行结果:

fabric 执行脚本 执行脚本语句_bash_18

案例:读取多个值

fabric 执行脚本 执行脚本语句_bash_19

运行结果:

fabric 执行脚本 执行脚本语句_bash_20

案例只读变量:

fabric 执行脚本 执行脚本语句_linux中写脚本一般用语言_21

运行结果:

fabric 执行脚本 执行脚本语句_shell脚本_22

查看环境变量:env

fabric 执行脚本 执行脚本语句_fabric 执行脚本_23

fabric 执行脚本 执行脚本语句_fabric 执行脚本_24

导出环境变http://www.cppcns.com量(其他shell识别该变量)

source 脚本文件

source命令用法:

source FileName

作用:在当前bash环境下读取并执行FileName中的命令。

注:该命令通常用命令“.”来替代。

如:source .bash_rc 与 . .bash_rc 是等效的。

注意:source命令与shell scripts的区别是,

source在当前bash环境下执行命令,而scripts是启动一个子shell来执行命令。这样如果把设置环境变量(或alias等等)的命令写进scripts中,就只会影响子shell,无法改变当前的BASH,所以通过文件(命令列)设置环境变量时,要用source 命令。

fabric 执行脚本 执行脚本语句_解析器_25

fabric 执行脚本 执行脚本语句_解析器_26

可以在终端中读取:

fabric 执行脚本 执行脚本语句_bash_27

在其他sh脚本读取:

fabric 执行脚本 执行脚本语句_解析器_28

运行结果:

fabric 执行脚本 执行脚本语句_bash_29

注意事项:

1、变量名只能包含英文字母下划线,不能以数字开头

1_num=10 错误

num_1=20 正确

2、等号两边不能直接接空格符,若变量中本身就包含了空格,则整个字符串都要用双引号、或单引号括起来

3、双引号 单引号的区别

双引号:可以解析变量的值

单引号:不能解析变量的值

fabric 执行脚本 执行脚本语句_解析器_30

运行结果:

fabric 执行脚本 执行脚本语句_linux中写脚本一般用语言_31

如果想在PATH变量中 追加一个路径写法如下:(重要!!!!)

export PATH=$PATH:/需要添加的路径

5、预设变量

shell直接提供无需定义的变量

fabric 执行脚本 执行脚本语句_fabric 执行脚本_32

案例:

fabric 执行脚本 执行脚本语句_fabric 执行脚本_33

运行结果:

fabric 执行脚本 执行脚本语句_linux中写脚本一般用语言_34

脚本标量的特殊用法

fabric 执行脚本 执行脚本语句_bash_35

fabric 执行脚本 执行脚本语句_解析器_36

fabric 执行脚本 执行脚本语句_fabric 执行脚本_37

加-e转义 才起换行作用

fabric 执行脚本 执行脚本语句_shell脚本_38

()由子shell 完成

fabric 执行脚本 执行脚本语句_fabric 执行脚本_39

{}由当前的shell执行

fabric 执行脚本 执行脚本语句_解析器_40

6、变量的扩展

6.1、判断变量是否存在

fabric 执行脚本 执行脚本语句_linux中写脚本一般用语言_41

fabric 执行脚本 执行脚本语句_linux中写脚本一般用语言_42

6.2、字符串的操作

fabric 执行脚本 执行脚本语句_linux中写脚本一般用语言_43

7、条件测试

test命令:用于测试字符串、文件状态和数字

test命令有两种格式:

test condition 或[ condition ]

使用方括号时,要注意在条件两边加上空格。

7.1、文件测试

fabric 执行脚本 执行脚本语句_bash_44

fabric 执行脚本 执行脚本语句_解析器_45

7.2、字符串测试

fabric 执行脚本 执行脚本语句_linux中写脚本一般用语言_46

fabric 执行脚本 执行脚本语句_linux中写脚本一般用语言_47

fabric 执行脚本 执行脚本语句_shell脚本_48

7.3、数值测试

fabric 执行脚本 执行脚本语句_解析器_49

fabric 执行脚本 执行脚本语句_shell脚本_50

fabric 执行脚本 执行脚本语句_bash_51

7.4、符合语句测试

fabric 执行脚本 执行脚本语句_bash_52

fabric 执行脚本 执行脚本语句_解析器_53

8、控制语句

fabric 执行脚本 执行脚本语句_shell脚本_54

8.1、if控制语句

格式一:

if [条件1]; then

执行第一段程序

else

执行第二段程序

fi

格式二:

if [条件1]; then

执行第一段程序

elif [条件2];then

执行第二段程序

else

执行第三段程序

fi

案例:

fabric 执行脚本 执行脚本语句_linux中写脚本一般用语言_55

案例:判断当前路径下有没有文件夹 有就进入创建文件 没有 就创建文件夹 再进入创建文件

fabric 执行脚本 执行脚本语句_bash_56

运行结果:

fabric 执行脚本 执行脚本语句_linux中写脚本一般用语言_57

案例:

fabric 执行脚本 执行脚本语句_解析器_58

运行结果:

fabric 执行脚本 执行脚本语句_shell脚本_59

8.2、case

fabric 执行脚本 执行脚本语句_shell脚本_60

fabric 执行脚本 执行脚本语句_linux中写脚本一般用语言_61

8.3、for循环语句

fabric 执行脚本 执行脚本语句_shell脚本_62

fabric 执行脚本 执行脚本语句_linux中写脚本一般用语言_63

fabric 执行脚本 执行脚本语句_fabric 执行脚本_64

案例:

fabric 执行脚本 执行脚本语句_fabric 执行脚本_65

案例:扫描当前文件

fabric 执行脚本 执行脚本语句_bash_66

8.4、while

fabric 执行脚本 执行脚本语句_解析器_67

fabric 执行脚本 执行脚本语句_解析器_68

8.5、until

fabric 执行脚本 执行脚本语句_解析器_69

fabric 执行脚本 执行脚本语句_shell脚本_70

8.6、break continue

fabric 执行脚本 执行脚本语句_fabric 执行脚本_71

9、函数

fabric 执行脚本 执行脚本语句_fabric 执行脚本_72

所有函数在使用前必须定义,必须将函数放在脚本开始部分,直至shell解释器首次发现它时,才可以使用

fabric 执行脚本 执行脚本语句_shell脚本_73

案例:求最值

fabric 执行脚本 执行脚本语句_fabric 执行脚本_74

案例:函数分文件

fabric 执行脚本 执行脚本语句_shell脚本_75

fun.sh

fabric 执行脚本 执行脚本语句_解析器_76

24_sh.sh

fabric 执行脚本 执行脚本语句_解析器_77


本文标题: shell脚本语言的使用(超全超详细)