shell脚本应用

目录

 前言:

1. 掌握Shell脚本的基础知识

2. 学会使用Shell变量

2.1 交互式硬件设备

2.2 重定向操作

2.3 变量的作用 

2.4 变量的类型

2.5 整数变量的运算(赋值时必须用反撇号`)

 3.学会编写简单的Shell脚本

3.1 编写脚本代码

3.2 赋予可执行权限

3.3 执行脚本文件(特殊文件路径:.当前位置,..上级目录)

3.4  更完善的脚本构成

3.5 管道操作符号“|”( 本例用的awk,为文本处理命令) 3.6 定义一个新的变量

3.7 赋值时可以使用引号,它们将有如下意义:

3.8 设置变量的作用范围

3.9 环境变量:

3.10 位置变量

3.11 预定义变量

 4. 编写简单的shell脚本

4.1 脚本应用思路

4.2 编写脚本程序welcome.sh

4.3 编写脚本程序status、start、stop


 前言:

       Shell 既是一种命令语言,又是一种程序设计语言,在中文中解释“外壳”的意思,就是操作系统的外壳。工作中我们通过shell命令来操作和控制操作系统,在Linux操作系统中的Shell命令就包括touch、cd、pwd、mkdir等等。脚本的执行方式有两种,一种为编辑完成之后,为脚本添加可执行权限,然后使用./脚本文件;第二种为/bin/bash 脚本文件的名字,第二种执行方式没有可执行的权限。在shell脚本执行过程中可以改变的量称之为变量,与变量对应的为常量,意为在脚本执行过程中无法更改的量。Shell中变量的分为系统默认变量和用户自定义变量,变量名的命名规则,首个字符必须是字母,变量名中不能存在空格,但是可以有_下划线链接,不能出现标点符号,不能存在linux命令有关的关键字。总结来说,Shell是一个命令解释器,用户输入命时,shell解释器负责将命令解释给内核,内核对程序的运行或对计算机进行控制,最后处理完后将结果反馈给用户。   


1. 掌握Shell脚本的基础知识

http://<iframe src="//player.bilibili.com/player.html?aid=592053988&bvid=BV1Eq4y1z7u8&cid=453202514&page=1" scrolling="no" border="0" frameborder="no" framespacing="0" allowfullscreen="true"> </iframe>

1.1 Shell的作用 —— 命令解释器,“翻译官”,介于系统内核与用户之间,负责解释命令行。

1.2 用户的登录Shell

登录后默认使用的Shell程序,一般为 /bin/bash

不同Shell的内部指令、运行环境等会有所区别

[root@localhost ~]# cat /etc/shells
/bin/sh
/bin/bash
/sbin/nologin
/bin/tcsh
/bin/csh
/bin/ksh

2. 学会使用Shell变量

2.1 交互式硬件设备

标准输入:从该设备接收用户输入的数据

标准输出:通过该设备向用户输出数据

标准错误:通过该设备报告执行出错信息

2.2 重定向操作

 2.3 变量的作用 

为灵活管理Linux系统提供特定参数,有两层意思:

  • 变量名:使用固定的名称,由系统预设或用户定义

  • 变量值:能够根据用户设置、系统环境的变化而变化

2.4 变量的类型

  • 自定义变量:由用户自己定义、修改和使用

  • 环境变量:由系统维护,用于设置工作环境

  • 位置变量:通过命令行给脚本程序传递参数

  • 预定义变量:Bash中内置的一类变量,不能直接修改

2.5 整数变量的运算(赋值时必须用反撇号`

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

常用运算符

加法运算:+

减法运算: -

乘法运算: \*

除法运算: /

求模(取余)运算: %

:echo  $EX  $CISHU

AK=`expr $EX + $CISHU` (假定read 时输入15)

echo $AK


 3.学会编写简单的Shell脚本

3.1 编写脚本代码

使用vi文本编辑器

每行一条Linux命令,按执行顺序依次编写

[root@localhost ~]# vi first.sh
cd /boot/
pwd
ls -lh vml*
cd /root

wq存盘后,ls确认当前目录(/root)有first.sh  

3.2 赋予可执行权限

使脚本具有可执行属性

[root@localhost ~]# ll first.sh (先查文件默认的权限)

[root@localhost ~]# chmod +x first.sh+x前不写用户或组,默认所有人都给X权)

[root@localhost ~]# ls -l first.sh

-rwxr-xr-x 1 root root 144 04-26 15:02 first.sh

3.3 执行脚本文件(特殊文件路径:.当前位置,..上级目录)

方法一:脚本文件路径(若在当前位置,不能直接写文件名)

方法二:sh  脚本文件路径

方法三:source  脚本文件路径(先clear,再执行下列命令)

执行chmod –x first.sh,再运行下面命令,对比结果。

3.4  更完善的脚本构成

脚本声明

注释信息

可执行语句

[root@localhost ~]# vi  ./first.sh
#!/bin/bash
# This is my first Shell-Script.
cd /boot
echo "当前的目录位于:"
pwd
echo "其中以vml开头的文件包括:"
ls -lh vml*
echo "回到本文件存放目录"
cd /root

wq后,再运行一次上述脚本 

 3.5 管道操作符号“|”( 本例用的awk,为文本处理命令

将左侧的命令输出结果,作为右侧命令的处理对象

格式:cmd1  |  cmd2  [... | cmdn]

请思考:

有哪几种重定向操作,各自的操作符号是什么?

管道操作符号“|”的用途是什么?

3.6 定义一个新的变量

格式:变量名=变量值

变量名以字母或下划线开头,区分大小写,建议全大写

查看变量的值

格式:echo  $变量名

3.7 值时可以使用引号,它们将有如下意义:

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

如NEW=“WORD$Version”,将引用上面的变量,结果是WORD3.0

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

当需要用$符号时。如CASH=‘US$IS’

反撇号:命令替换,提取命令执行后的输出结果

EX=`pgrep –U root | wc –l`,把命令结果赋给EX

从键盘输入内容为变量赋值

 格式: read  [-p  提示信息”]  变量名

read  –p “请输入循环次数:” CISHU

3-2019-19

 3.8 设置变量的作用范围

格式1export   变量名 ... (已有的变量)

格式2export  变量名=变量值  ...(新定义的变量)

—— 两种格式可以混合使用

 3.9 环境变量:

由系统提前创建,用来设置用户的工作环境

配置文件: /etc/profile、~/.bash_profile

常见的环境变量:

 3.10 位置变量

表示为 $n,n为1~9之间的数字,超过9则用${n}

[root@localhost ~]# ./myprog.sh   one   two   three   four   five   six
[root@localhost ~]# cat myprog.sh
echo “字母表第5个字母是:” $5
echo “字母表第18个字母是:” ${18}

[root@localhost ~]# sh myprog.sh {a..z}
字母表第5个字母是:e
字母表第18个字母是:r

 3.11 预定义变量

[root@localhost ~]# cat mybak.sh
#!/bin/bash
TARFILE=beifen-`date +%Y%m%d`.tgz
tar zcf $TARFILE $* &> /dev/null
echo "已执行 $0 脚本,"
echo "共完成 $# 个对象的备份"
echo “具体内容包括: $*” 
[root@localhost ~]# sh mybak.sh  /etc/passwd  /etc/shadow 
已执行 ./mybak.sh 脚本,
共完成 2 个对象的备份
具体包括:/etc/passwd /etc/shadow
[root@localhost ~]# ls *.tgz
beifen-20181008.tgz

 4. 编写简单的shell脚本

4.1 脚本应用思路

1. 确定命令操作(设计并执行任务)

2. 编写Shell脚本(组织任务过程)

3. 设置计划任务(控制时间,调用任务脚本)

[root@localhost ~]# mysqldump -u operator ……
……
[root@localhost ~]# vi /opt/qnzx_dbbak/qnzx_dbbak.sh
#!/bin/bash
……
[root@localhost ~]# crontab -e
30 2 * * * /opt/qnzx_dbbak/qnzx_dbbak.sh

4.2 编写脚本程序welcome.sh

验证登录时的欢迎效果

实现思路:

新建脚本程序welcome.sh,依次报告各种系统信息

修改配置文件~/.bash_profile,调用welcome脚本

(~代表目录/root,编辑上述文件,添加执行本脚本命令)

新建脚本程序/root/bin/status,通过$1获取服务名称,并执行/etc/init.d/目录下的某个同名脚本

参考status编写其他两个脚本startstop

练习welcome.sh
echo "你所用的操作系统是:$( uname -o) "
echo "系统内核版本是:$( uname -r) "
echo "系统内核发行号是:$( uname -v) "
echo "系统硬件平台为:$( uname -i) " 
echo "系统当前用户有:  " 
who 
echo  "系统当前内存使用情况如下:  "
free 

结果: 

 4.3 编写脚本程序status、start、stop

使用上述脚本来控制系统服务

#cd /bin
#vi status
systemctl status $1
#chmod +x status
#status  atd(以前面用过的一次性任务服务为例)
其余2个脚本把红色单词换成start或stop即可。
stop atd(假定已完成该脚本)
status  atd(显示该已dead)
start atd(假定已完成该脚本)
status  atd(显示该正在running)

结果: 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值
>