Linux---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脚本退出状态码
在UNIX或者Linux中,每个命令都会返回一个退出状态码。退出状态码是一个整数,其有效范围为0~255。通常情况下,成功的命令返回0,而不成功的命令返回非0值。
Shell脚本中的函数和脚本本身也会返回退出状态码。在脚本或者是脚本函数中执行的最后的命令会决定退出状态码。另外,用户也可以在脚本中使用exit语句将指定的退出状态码传递给Shell。
通常退出状态码记录在$?中,且$?只记录刚刚执行过的命令的返回值。
二.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
变量的运算
运算表达式
在Shell脚本中,运算表达式用于执行数值计算或逻辑判断,是脚本实现自动化处理的基础。下面是一些常见的运算表达式:
$[ ],(()),let | 用于整数运算 |
declare | 定义变量值和属性,-i参数可以用于定义整形变量,做运算 |
bc | 支持浮点运算 |
如果不用这样的表达式,看如下代码:
[root@localhost ~]# echo 2+3
2+3
这里并不会计算2+3,而是直接把这3个字符打印出来了,正确的做法如下:
[root@localhost ~]# echo $[2+3]
5
[root@localhost ~]# let a=2+3
[root@localhost ~]# echo $a
5
想要实现定义aa变量为整数类型,然后再做数学运算,命令如下:
[root@localhost ~]# declare -i aa
[root@localhost ~]# aa=3/2
[root@localhost ~]# echo $aa
1
首先declare -i aa 把aa定义为一个整数,所以3/2等于1.5取整数1,然后赋值给aa,所以aa的值为1。以上表达式不能求得小数,如果想要得到小数要使用bc命令,用法如下:
echo "scale=N ; 算法" | bc
这里的N是一个数字,表示小数点后面保留几位。
练习1:计算2/3,小数点后面保留3位
[root@localhost ~]# echo "scale=3 ; 2/3" | bc
.666
这里得到的结果是0.666,整数部分0没有显示。
算数运算:
+,-,*,/,**,% | 表示加法;减法;乘法;除法;次方;取余 |
比较运算:
-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。
赋值运算
=,+=,-=,*=,/=,%= | 直接赋值,(加/减/乘/除/取余)等于 |
逻辑运算
字符串比较运算
字符串比较一般是比较两个字符串是否相同,用到较多的比较符有以下两种:
== | 相同 |
!= | 不相同 |
做完比较之后,通过返回值来判断比较是否成立。
练习1:定义一个变量aa=tom,然后做判断,命令如下:
未完待续.......
原文地址:https://blog.csdn.net/zhoutong2323/article/details/143818110
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!