《Shell 入门:从零写一个 “Hello World” 脚本》

目录

前言

一、shell脚本是什么?

二、编写脚本

2.2 执行Shell脚本

三 、shell 程序:变量

3.1语法格式

3.2 变量使用 

3.3 变量类型

四、字符串 

4.1 字符串

4.2 双引号

4.3 获取字符串长度 

4.4 提取子字符串

4.5 查找子字符串的位置 

五、参数传递  

5.1参数传递

5.2 特殊字符 

六、运算符

6.1 运算符的基本使用

6.2 关系运算符

6.3逻辑运算符

6.4 字符串运算符 

6.5 文件

七、流程控制 

7.1 if...else

7.2 for

7.3 while 

7.4 case  

2.读入数据

一、shell脚本是什么?

Shell 脚本(Shell Script)是一种文本文件,包含一系列按顺序执行的 Shell 命令,用于自动化完成特定任务。它就像一个 “命令的集合”,可以将复杂的操作流程写成脚本文件,通过一次执行脚本就能完成原本需要手动输入多条命令的工作

二、编写脚本

1 使用 vi 编辑器新建一个文件hello.sh  

echo命令 用于向窗口输出文本。

给shell程序赋予执行权限:

给shell程序赋予执行权限: chmod +x ./hello.sh # 使脚本附有权限

2.2 执行Shell脚本

执行shell程序 提前:给shell程序授予可执行权限

第一种:./xxx.sh 在当前目录中执行shell程序

第二种:/xx/xxx.sh 书写全路径的shell程序

第三种:sh /xx/xxx.sh 把shell程序作用/bin/sh解释器的参数,通过运

行解释器来执行shell

三 、shell 程序:变量

3.1语法格式

变量的语法:变量名=值

注意: 等号两边不能有空格,同时变量名的命名须遵循如下规则:

首个字符必须为字母( a-z, A-Z)

中间不能有空格,可以使用下划线( _)

不能使用标点符号

不能使用 bash 里的关键字(可用 help 命令查看保留关键字)

3.2 变量使用 

使用一个定义过的变量,只要在变量名前面加 $ 即可。

花括号是可选的,加不加都行,加花括号是为了帮助解释器识别变量的

边界。

使用 readonly 命令可以将变量定义为只读变量,只读变量的值不能被改

变。

使用 unset 命令可以删除变量。 不能删除只读变量。

3.3 变量类型

变量的类型可以分为:局部变量、全局变量

局部变量:局部变量在脚本或命令中定义,仅在当前 shell 实例中有效,其

他 shell 启动的程序不能访问局部变量

四、字符串 

4.1 字符串

是shell编程中最常用最有用的数据类型(除了数字和字符串,也没

啥其它类型好用了),字符串可以用单引号,也可以用双引号,也可以不

用引号。

4.2 双引号

双引号的优点:

双引号里可以有变量

双引号里可以出现转义字符

4.3 获取字符串长度 

4.4 提取子字符串

4.5 查找子字符串的位置 

五、参数传递  

5.1参数传递

./shell程序[空格] 参数1 [空格] 参数2 

shell程序脚本内获取参数的格式为: $n

n 代表一个数字, 1 为执行脚本的第一个参数, 2 为执行脚本的第二个参

数,以此类推......

$0 表示当前脚本名称

5.2 特殊字符 

$H传递到脚本参数的个数
$*以一个单字符串显示所有向脚本传递的参数
$$脚本运行当前的ID号

$!

后台运行的最后一个进程ID号 
$@与$*相同,但是使用时加引号,并在引号中返回每个参数
$?

显示最后命令的退出状态。0表示没有错误 其他表明有错误

5.2 $*和$@的区别

相同点: 都表示传递给脚本的所有参数。

不同点:

不被" "包含时:$*和$@都以$1 $2... $n 的形式组成参数列表

被" "包含时:

*"$*" 会将所有的参数作为一个整体,以"$1 $2 ... $n" 的形式组成一个

整串

"$@" 会将各个参数分开,以"$1" "$2" ... "$n" 的形式组成一个参数列

六、运算符

6.1 运算符的基本使用

Shell和其他编程语言一样,支持包括:算术、关系、逻辑、字符串等运算

符。

echo $1 # 接收第一个参数

$# #参数的个数

$* #参数列表 “$*”作为一个完整的字符串

$@ #参数列表 “$@”作为一个参数列表

/bin/bash不支持简单的数学运算,但是可以通过其他命令来实现,

例如:expr

expr 是一款表达式计算工具,使用它能完成表达式的求值操作。

注意:

1、运算数和运算符之间要有空格。例如: 2+2 是不能运算的,

必须写成 `2 + 2` 

2、完整的表达式要被`符号包含,注意不是单引号,在 Esc 键下边

案例2 :$(( ))

6.2 关系运算符

-eq

检测两个数是否相等,相等返回 true

-ne

检测两个数是否不相等 不相等返回true

-lt小于应用于整型比较
-gt检测左进的数是否大于右边如果是返回true 
-le

小于等于应用于整型比较

-ge

大于或等于应用于整型比较

6.3逻辑运算符

运算符

-a 双方都成立

-o  单方成立或表达式

6.4 字符串运算符 

-n STRING字符串长度不为零 (非空字符串)

-z STRING字符串长度为0(空字符串)

= 判断两个字符是否一样

!=判断两个字符是否不一样

6.5 文件

文件测试运算符

-f   存在是普通文件

-d 存在且是目录

-s 文件不为空

-e 文件存在

-r 文件存在可读

-w文件存在并且可导

-x 文件存在可执行

七、流程控制 

任何程序都有默认的执行流程,通常是从上向下逐行依次执行

选择:有选择性的执行某行或某段程序

重复:一直重复性的执行某行或某段程序,至到执行结束(条件控制循

环执行的次数)

7.1 if...else

单支 

双支 

执行机制:判断一次条件,有两个不同结果

条件成立(true):执行then后面的代码(命令1)

条件失败(false):执行else后面的代码(命令2)

7.2 for

循环流程控制:程序在执行时重复性的执行某行或某段代码。

不能出现死循环现象(在循环中添加条件用于在某个时刻结束循环

一个简单的循环必须具备:

1. 循环初始值

2. 循环条件

3. 修改循环条件

7.3 while 

let 命令是 BASH 中用于计算的工具,用于执行一个或多个表达式,变

量计算中不需要加上 $ 来表示变量

自加操作:let no++

自减操作:let no--

7.4 case  


8 函数使用 

8.1函数的简单使用

8.2 函数的参数

在 Shell 中,调用函数时可以向其传递参数。在函数体内部, 通过 $n 的

形式来获取参数的值,例如, $1 表示第一个参数, $2 表示第二个参数...

注意, 当 n>=10 时,需要使用${n} 来获取参数

8.3 函数的返回值

 

函数的调用: 函数名

函数中的参数传递:

在函数中接收传递的参数可以使用:$n 例:$1 $7 ${10}

调用函数时传递参数: 函数名 参数1 参数2

函数调用后接收返回值:

在函数中使用return 数据值的方式把数据返回出去

9 数组 

数组可以理解为是一个用来存放多个值的容器。

数组中存储的数据,通常可以称为:元素。

当数组中存储了多个元素后,就会给每一个元素添加一个编号(索引),从0

开始。

9.1 定义数组

数组可以理解为是一个用来存放多个值的容器。

数组中存储的数据,通常可以称为:元素。

当数组中存储了多个元素后,就会给每一个元素添加一个编号(索引),从0

开始。

句式
array_name=((value1 value2 value3 ... valueN)

Bash Shell 只支持一维数组(不支持多维数组),初始化时不需要定义数组

大小。

Shell 数组用括号来表示,元素用"空格"符号分割开,

9.2 读取数组

9.2.1

9.2.2 获取数组中的所有元素

使用@ 或 * 可以获取数组中的所有元素,例如:${array_name[*]}、${a

rray_name[@]}

9.2.3 获取数组的长度

获取数组长度的方法与获取字符串长度的方法相同,例如:${#array_nam

e[*]}、${#array_name[@]}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值