shell基础、编写简单的shell脚本及变量

一、shell基础

1.概念

        shell是一个命令解释器。他是在Linux操作系统的外层,负责和计算机用户进行交互,把用户输入的内容翻译成操作系统可以识别的内容并把操作系统返回的结果翻译成用户可以识别的内容。

常见的shell解释器: 

Bourne Shell (/usr/bin/sh或/bin/sh)

Bourne Again Shell (/bin/bash)

C Shell (/usr/bin/csh)

K Shell (/usr/bin/ksh)

Shell for Root (/sbin/sh)

2.shell脚本

        shell脚本就是由Shell命令组成的执行文件,将一些命令整合到一个文件 中,进行处理业务逻辑,脚本不用编译即可运行,它从一定程度上减轻 了工作量,提高了工作效率,还可以批量、定时处理主机,方便管理员 进行设置或者管理。

3.shell脚本编写注意事项

shell命名: shell脚本名称命名一般为英文、大写、小写、后缀以.sh结尾;

不能使用特殊符号、空格 名称要写的一眼可以看出功能,也就是顾名思义shell脚本首行需要#!/bin/bash开头;

shell脚本变量不能以数字、特殊符号开头,可以使用下划线 _,但不能 用破折号——。

二、shell脚本的构成 

 三、编写shell脚本

1.第一个shell脚本

shell脚本其实就是有序执行命令条件。

[root@localhost ~]# touch hello.sh
[root@localhost ~]# vim hello.sh   编写一个脚本,输出hello world!
#!/bin/bash
echo "hello world!"

执行脚本的几种方式:

        1.bash 脚本名称

                source 脚本名称---在当前环境生效

[root@localhost ~]# bash hello.sh
hello world!
[root@localhost ~]# source hello.sh
hello world

        2.sh 脚本名称

[root@localhost ~]# sh hello.sh
hello world!

        3.添加执行权限,使用./脚本名称命令

[root@localhost ~]# chmod +x hello.sh
[root@localhost ~]# ll hello.sh
-rwxr-xr-x. 1 root root 32 7月  26 15:57 hello.sh
[root@localhost ~]# ./hello.sh
hello world!

2.编写安装nginx脚本

逻辑顺序:先安装依赖关系,再进入到系统默认的安装包目录src,使用wget 命令从网上下载nginx1.22.1版本的安装包,然后解压,再移动到 nginx 安 装目录,执行编译安装(预配置,编译,编译安装)

[root@localhost ~]# vim install_nginx.sh
#!/bin/bash
yum -y install gcc gcc-c++ make pcre-devel openssl-devel wget   #下载相关软件包
cd /usr/local/src/ 
wget 'http://nginx.org/download/nginx-1.22.1.tar.gz'   #从官方网站下载nginx
tar xf nginx-1.22.1.tar.gz   #解压nginx软件包
cd nginx-1.22.1
./configure --prefix=/usr/local/nginx   #检查配置文件
make -j 4   #进行编译
make install   #安装nginx

四、变量 

1.概念

        变量是用来存放系统或用户需要使用的特定参数或者值,变量的值可以根据用户设定或者系统环境变化而相应变化,在Shell脚本中使用变量,可使脚本更加灵活,适应性更强。

        变量的注意事项:

变量命名规则:必须由大写字母、小写字母、下划线、数字,并且首字 母不能是数字;

在变量命名时:建议也简写出该变量是什么用处;

变量值的类型:值的类型会分为整型、浮点型、字符串型、布尔型等,而且使用变量需要指定类型Shell 默认的变量类型都是字符串,无需指定类型。

2.变量的分类

        1.自定义变量

        由用户自己定义、使用和修改。

        语法格式:变量名=变量值

        注意:在变量名=值中,等于号=之前和之后不能有空格,值内如果输入数学算式,是没办法算出结果的,只会输出字符串。

[root@localhost ~]# A=1314 # 左边是变量名、右边是值
[root@localhost ~]# echo $A
1314
[root@localhost ~]# unset A # 清除变量
[root@localhost ~]# echo $A
[root@localhost ~]#
        2.环境变量

        由系统维护,用户设置工作环境。

[root@localhost ~]# env # 查看所有环境变量
[root@localhost ~]# echo $PWD   #查看当前工作目录
/root
[root@localhost ~]# echo $SHELL   #查看shell使用的解释器
/bin/bash
[root@localhost ~]# echo $USER   #查看当前登录系统的用户
root
[root@localhost ~]# echo $PATH   #查看用于设置可执行程序的默认搜索路径
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
[root@localhost ~]#
        3.位置变量

        通过命令行给脚本程序传递参数 (也属于预定义变量) 为了在使用Shel脚本程序时,方便通过命令行为程序提供操作参数,Bash引入了位置变量的概念位置变量有 ,n,n为1~9之间的数字。

$0:第一个字段表示命令名或脚本名称

$1:脚本要处理的第一个参数

$2:脚本要处理的第二个参数

....

Shell脚本最多可以直接处理9个参数

[root@localhost shell]# vim ip.sh
#!/bin/bash
ifconfig $1 | grep -w inet | awk '{print $2}' # 设置⼀个参数

[root@localhost shell]# sh ./ip.sh ens32
192.168.100.100
[root@localhost shell]# vim ip.sh
#!/bin/bash
ifconfig $1$2 | grep -w inet | awk '{print $2}' # 设置两个参数

[root@localhost shell]# sh ./ip.sh ens 32
192.168.100.100
[root@localhost shell]#
        4.预定义变量

        Bash中内置的一类变量,不能直接修改 预定义变量是Bash程序预先定义好的一类特殊变量,用户只能使用预定 义变量,而不能创建新的预定义变量,也不能直接为预定义变量赋值。

$*:将所有参数作为整体

$@:单个参数的组合,每个参数占一行

$0:保存了脚本名称

$?:保存命令或脚本的执行状态码

$#:保存脚本要处理的参数的个数

[root@localhost shell]# vim hehe.sh
#!/bin/bash
for x in "$*" # 将所有参数整合到一起,总共列为一行
do
 echo $x
done
for y in "$@" # 将所有参数单个列出,每个参数单列一行
do
 echo $y
done
:wq
[root@localhost shell]# sh ./hehe.sh 1 2 3 4 5 6 # 
查看$*和$@的区别
1 2 3 4 5 6 # $*的结果
1
2
3
4
5
6  # $@的结果

3.变量的定义与输出

1.定义一个新的变量

格式:变量名=变量值

注意:变量名必须以字母或下划线开头,严格区分大小写

2.变量符号运用

双引号:允许通过$符号引用其他变量值

单引号:禁止引用其他变量值,$视为普通字符

反撇号: 或$(): 命令替换,提取命令的执行结果

[root@localhost shell]# X=aaa
[root@localhost shell]# echo "$X" # 双引号可以使用变量
aaa
[root@localhost shell]# echo '$X' # 单引号只显示符号内的
字符
$X
[root@localhost shell]# ip1=`ifconfig ens32 | grep -w inet 
| awk '{print$2}'` # ``反撇号可以引用命令
[root@localhost shell]# ip2=$(ifconfig ens32 | grep -w 
inet | awk '{print$2}') # $()与反撇号作用相同
[root@localhost shell]# echo $ip1
192.168.100.100
[root@localhost shell]# echo $ip2
192.168.100.100
[root@localhost shell]# x=100(3)输入和输出 
输入格式:read [-p "显示的提示信息"] 变量名
输出格式:echo $变量名
[root@localhost shell]# y=50
[root@localhost shell]# z=`expr $x + $y` # 整数运算
[root@localhost shell]# echo $z
150
[root@localhost shell]# x=1.4
[root@localhost shell]# expr $x + 1 # 判断是否为浮点数
expr: ⾮整数参数
[root@localhost shell]# [ $? -ne 0 ] && echo "x为浮点数"
x为浮点数
[root@localhost shell]#
 3.输入和输出

输入格式:read [-p "显示的提示信息"] 变量名

输出格式:echo $变量名

[root@localhost shell]# read x y # 输⼊,变量输入,在下
一行输入
1 3
[root@localhost shell]# echo $x $y # 输出,直接输出变量
1 3
[root@localhost shell]# read -p "请输⼊你要赋值的变量值" x y
请输⼊你要赋值的变量值1 5 
[root@localhost shell]# echo $x $y
1 5
[root@localhost shell]# vim ip.sh # 编写一个查看IP的脚
本,内容如下
#!/bin/bash
read -p "请输⼊接⼝名称:" x # 输入x变量等于什么,脚本内不
用写,命令行输入该变量x等于什么即可,该变量x可在脚本内引用
ifconfig $x | grep -w inet | awk '{print $2}' 
:wq
[root@localhost shell]# sh ip.sh
请输⼊接⼝名称:ens32
192.168.100.100
[root@localhost shell]# sh ip.sh
请输⼊接⼝名称:lo
127.0.0.1
[root@localhost shell]# vim read.sh # 编写输入账号密码的脚
本,内容如下5、变量的作用范围 
默认情况下,新定义的变量只在当前Shell环境中有效,因此称为局部变
量。当进入子程序或新的子shell 时,局部变量将无法再使用。
为了使用户定义的变量在所有子Shell环境中能够继续使用,减少重复设
置工作,可以通过内部命令export将指定的变量导出为“全局变量”。
格式 1:export 变量名
格式 2:export 变量名=值
#!/bin/bash
read -p "请输⼊您的姓名:" name # 该变量name是在命令行输入
的,相当于变量=值
read -p "请输⼊您的密码:" passwd # 该变量passwd是在命令行输入
的,相当于变量=值
if [ $passwd = "123456" ]; then # if判断语句,如果(if)某某
等于某某,那么(then)执行什么命令,否则(else)执行什么命令,结尾fi
 echo "你好,$name !"
else
 echo "抱歉,您输⼊的密码不正确!"
fi

[root@localhost shell]# sh read.sh
请输⼊您的姓名:admin
请输⼊您的密码:112233
抱歉,您输⼊的密码不正确!
[root@localhost shell]# sh read.sh
请输⼊您的姓名:admin
请输⼊您的密码:123456
你好,admin !
[root@localhost shell]#

4.变量的作用范围

默认情况下,新定义的变量只在当前Shell环境中有效,因此称为局部变量。当进入子程序或新的子shell时,局部变量将无法再使用。为了使用户定义的变量在所有子Shell环境中能够继续使用减少重复设置工作,可以通过内部命令export将指定的变量导出为“全局变量”。

格式 1:export 变量名

格式 2:export 变量名=值

[root@localhost shell]# x=aaa
[root@localhost shell]# export y=bbb # 使y=bbb导出为
全局变量,即使下次更新环境变量,y也会生效,相当于在/etc/profile内永
久赋值
[root@localhost shell]# hostname shell
[root@localhost shell]# bash
[root@shell shell]# echo $x
[root@shell shell]# echo $y
bbb
[root@shell shell]#

6.变量的运算

1.整数运算

格式:expr 变量1 运算符 变量2 运算符 变量3....

运算符:+ - * /(+ - × ÷)

[root@shell shell]# x=123
[root@shell shell]# y=111
[root@shell shell]# expr $x + $y # 加
234
[root@shell shell]# expr $x - $y # 减
12
[root@shell shell]# expr $x \* $y # 乘
13653
[root@shell shell]# expr $x / $y # 除
1
[root@shell shell]# expr $x % $y # 余数计算
12
[root@shell shell]#
2.精度计算
[root@shell shell]# yum -y install bc # 精度计算前,先
安装bc这个软件才可进行,否则只能进行整数运算
上次元数据过期检查:2:45:58 前,执⾏于 2023年06⽉14⽇ 星期三 22时
21分58秒。
软件包 bc-1.07.1-5.el8.x86_64 已安装。
依赖关系解决。
⽆需任何处理。
完毕!
[root@shell shell]# x=123
[root@shell shell]# y=111
[root@shell shell]# echo "scale=5; $x / $y" | bc
1.10810
[root@shell shell]#

  • 12
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值