Linux---shell脚本
文章目录
-
目录
文章目录
前言
一.Shell脚本定义
shell脚本书写规范
shell脚本执行方式
二.Shell变量
变量定义
定义规范
定义方式
变量的运算
数值运算
数值比较
未完待续......
前言
希望通过本文的学习,你能够掌握Shell脚本的基本知识和实用技巧,将Shell脚本融入到你的日常工作中,成为你提高工作效率、实现自动化任务的得力助手。让我们一起踏上这段探索Shell脚本的旅程,开启一段充满无限可能的自动化之旅吧!
一.Shell脚本定义
Shell以文本方式提供了与操作系统内核进行交互的方式。用户可以在shell脚本文件中写入一系列系统命令,然后执行shell脚本就可以自动执行脚本文件中的命令从而节省大量时间。
Shell可以帮助用户高效地执行一系列命令和任务。通过学习和掌握Shell脚本的编写技巧,用户可以大大提高工作效率和自动化水平。
shell脚本书写规范
- 脚本命名:
- 脚本名应以
.sh
结尾,名称应尽量具有描述性,如ClearLog.sh
、SerRestart.sh
等。
- 脚本名应以
- 编码格式:
- 尽量使用UTF-8编码,注释及输出尽量使用英文。
- 执行权限:
- 一般应给予脚本执行权限,但一些仅用于变量定义的配置文件则无需加执行权限。
- 解释器声明:
- 脚本首行应使用
#!/bin/bash
(或#!/usr/bin/env bash
)来声明解释器,没有空格,不带任何选项。
- 脚本首行应使用
下面是一个简单的脚本案例:
#创建一个以.sh结尾的shell脚本文件
[root@localhost sh]# vim test_1.sh
首行添加解释器声明,在此之后可以添加需要执行的命令
#!/bin/bash
【添加需要执行的命令】#添加完脚本内容后给脚本添加执行权限
[root@localhost sh]# chmod u+x test_1.sh
shell脚本执行方式
直接运行脚本
- 方法描述:
- 在终端中输入脚本文件的路径并按下回车键即可执行脚本。
- 例如,如果脚本文件名为
script.sh
,并且位于当前目录下,则可以在终端中输入./script.sh
来执行该脚本。
- 特点与要求:
- 需要确保脚本文件具有可执行权限。
- 可以使用
chmod
命令来设置脚本的权限,如chmod +x script.sh
。 - 脚本文件的第一行通常包含Shebang(如
#!/bin/bash
),用于指定解释器。
#利用路径的方式执行一下脚本
[root@localhost sh]# ./test_1.sh
#若无执行权限会出现如下报错:
-bash: ./test_1.sh: 权限不够#提示“权限不够”代表当前用户无执行权限,需要添加权限
[root@localhost sh]# chmod u+x test_1.sh
使用shell解释器执行
- 方法描述:
- 通过显式地指定Shell解释器来执行脚本。
- 例如,使用
bash script.sh
或sh script.sh
来执行脚本。
- 特点与要求:
- 不需要脚本文件具有可执行权限。
- 可以选择不同的Shell解释器,如bash、sh、zsh等。
- 适用于不同Shell环境,提高了脚本的兼容性。
[root@localhost sh]# bash test_1.sh[root@localhost sh]# sh test_1.sh
二.Shell变量
顾名思义,变量就是程序设计语言中的一个可以变化的量,从本质上讲,变量就是在程序中保存用户数据的一块内存空间,而变量名就是这块内存空间的地址。
变量定义
定义规范
定义变量有以下几点需要注意:
- 变量名可以包含下划线,数字,大小写字母,但不能以数字开头。
- "="两边不要有空格。
- “值”如果含有空格,要使用单引号' '或双引号“ ”引起来
- 定义变量时,变量名前是不需要加$的,引用变量时需要在变量名前加$
常见定义错误如下:
变量名不能以数字开头,所以会报错
[root@localhost ssh]# 1aa=123
bash: 1aa=123: command not found...变量名只能以数字,字母,下划线组合,所以报错
[root@localhost ssh]# aa-1=123
bash: aa-1=123: command not found...等号右边有空格,所以报错
[root@localhost ssh]# aa=1 2
bash: 2: command not found...
正常的变量定义如下:
[root@localhost ssh]# a=123
[root@localhost ssh]# echo $a
123
定义方式
基本定义式
格式如下:
变量=值
[root@localhost ssh]# a=123
[root@localhost ssh]# echo $a
123
命令结果定义式
格式如下:
变量=$(命令)
例如,定义一个名称是IP的变量,对应的值是ens160的IP,命令如下:
[root@localhost ~]# IP=$(ifconfig ens160 | awk '/inet /{print $2}')
[root@localhost ~]# echo $IP
192.168.23.143
交互式定义
使用read
命令从用户输入中获取变量的值。这种方法通常用于需要用户输入的场景。
格式如下:
read -p '提示信息' 变量
当执行read命令时,系统会提示用户输入一些内容,所输入的值会赋值给read后面的变量,这里我们输入的是123,所以打印a变量时看到的是123。
[root@localhost ~]# read -p "请输入数字:" a
请输入数字:123
[root@localhost ~]# echo $a
123
变量的运算
数值运算
+ | 表示加法 |
- | 表示减法 |
* | 表示乘法 |
/ | 表示除法 |
** | 表示次方 |
进行数学运算的表达式有$(()),$[ ],let等。
[root@localhost ~]# a=$[1+2]
[root@localhost ~]# echo $a
3
数值比较
-eq | 相等 |
-ne | 不相等 |
-gt | 大于 |
-ge | 大于等于 |
-lt | 小于 |
-le | 小于等于 |
练习1:判断1等于2,命令如下:
[root@localhost ~]# [1 -eq 2 ]
bash: [1: command not found...
[root@localhost ~]# echo $?
127
1是不能等于2的,所以判断不成立,返回值是非零值。
练习2:判断1不等于2,命令如下:
[root@localhost ~]# [ 1 -ne 2 ]
[root@localhost ~]# echo $?
0
1不等于2,所以判断成立,返回值为0。