首页 > 系统相关 >第16章 Shell企业编程基础

第16章 Shell企业编程基础

时间:2024-11-15 14:44:19浏览次数:3  
标签:脚本 bin Shell 变量 16 编程 echo

说到Shell编程,很多从事Linux运维工作的朋友都不陌生,都对Shell有基本的了解,初学者可能刚开始接触Shell的时候,有各种想法,感觉编程非常困难,SHELL编程是所有编程语言中最容易上手,最容易学习的编程脚本语言。

本章向读者介绍Shell编程入门、Shell编程变量、If、While、For、Case、Select基本语句案例演练及Shell编程四剑客Find、Grep、Awk、Sed深度剖析等。

16.1 SHELL编程入门简介

曾经有人说过,学习Linux不知道Shell编程,那就是不懂Linux,现在细细品味确实是这样。Shell是操作系统的最外层,Shell可以合并编程语言以控制进程和文件,以及启动和控制其它程序。

Shell 通过提示您输入,向操作系统解释该输入,然后处理来自操作系统的任何结果输出,简单来说Shell就是一个用户跟操作系统之间的一个命令解释器。

Shell是用户与Linux操作系统之间沟通的桥梁,用户可以输入命令执行,又可以利用 Shell脚本编程去运行,如图16-1所示:

在这里插入图片描述

图16-1 Shell、用户及Kernel位置关系

在这里插入图片描述

Linux Shell种类非常多,常见的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)

不同的Shell语言的语法有所不同,一般不能交换使用,最常用的shell是Bash,也就是Bourne Again Shell。Bash由于易用和免费,在日常工作中被广泛使用,也是大多数Linux操作系统默认的Shell环境。

Shell、Shell编程、Shell脚本、Shell命令之间都有什么区别呢?简单来说Shell是一个整体的概念,Shell编程与Shell脚本统称为Shell编程,Shell命令是Shell编程底层具体的语句和实现方法。

16.2 SHELL脚本及Hello World

要熟练掌握Shell编程语言,需要大量的练习,初学者可以用Shell打印“Hello World”字符,寓意着开始新的启程!
Shell脚本编程需要如下几个事项:
 Shell脚本名称命名一般为英文、大写、小写;
 不能使用特殊符号、空格来命名;
 Shell脚本后缀以.sh结尾;
 不建议Shell命名为纯数字,一般以脚本功能命名。
 Shell脚本内容首行需以#!/bin/bash开头;
 Shell脚本中变量名称尽量使用大写字母,字母间不能使用“-”,可以使用“_”;
 Shell脚本变量名称不能以数字、特殊符号开头。

如下为第一个Shell编程脚本,脚本名称为:first_shell.sh,代码内容如下:

#!/bin/bash
#This is my First shell
#By author jfedu.net 2022
echo  “Hello  World ”

First_shell.sh脚本内容详解如下:

#!/bin/bash              固定格式,定义该脚本所使用的Shell类型;
#This is my First shell     #号表示注释,没有任何的意义,SHELL不会解析它;
#By author jfedu.net 2022 表示脚本创建人,#号表示注解;
echo  “Hello  World !” Shell脚本主命令,执行该脚本呈现的内容。

Shell脚本编写完毕,如果运行该脚本,运行用户需要有执行权限,可以使用chmod o+x first_shell.sh赋予可执行权限。然后./first_shell.sh执行即可,还可以直接使用命令执行: /bin/sh first_shell.sh直接运行脚本,不需要执行权限,最终脚本执行显示效果一样。

初学者学习Shell编程,可以将在Shell终端运行的各种命令依次写入到脚本内容中,可以把Shell脚本当成是Shell命令的堆积。

16.3 Shell编程之变量详解

Shell是非类型的解释型语言,不像C++、JAVA语言编程时需要事先声明变量,Shell给一个变量赋值,实际上就是定义了变量,在Linux支持的所有shell中,都可以用赋值符号(=)为变量赋值,Shell变量为弱类型,定义变量不需要声明类型,但在使用时需要明确变量的类型,可以使用Declare指定类型,Declare常见参数有:

+  /  -  " - "可用来指定变量的属性,"+"为取消变量所设的属性;
-f  仅显示函数;
r  将变量设置为只读;
x  指定的变量会成为环境变量,可供shell以外的程序来使用;
i  指定类型为数值,字符串或运算式。

Shell编程中变量分为三种,分别是系统变量、环境变量和用户变量,Shell变量名在定义时,首个字符必须为字母(a-z,A-Z),不能以数字开头,中间不能有空格,可以使用下划线(_),不能使用(-),也不能使用标点符号等。

例如定义变量A=jfedu.net,定义这样一个变量,A为变量名,jfedu.net是变量的值,变量名有格式规范,变量的值可以随意指定。变量定义完成,如需要引用变量,可以使用$A。

如下脚本var.sh脚本内容如下:

#!/bin/bash
#By author jfedu.net 2022
A=123
echo  “Printf variables is $A.”

执行该Shell脚本,结果将会显示:Printf variables is jfedu.net。

16.4 Shell编程之系统变量

Shell常见的变量之一系统变量,主要是用于对参数判断和命令返回值判断时使用,系统变量详解如下:

$0 							   当前脚本的名称;
$n 							   当前脚本的第n个参数,n=1,2,…9;
$* 							   当前脚本的所有参数(不包括程序本身);
$# 							   当前脚本的参数个数(不包括程序本身);
$? 							   命令或程序执行完后的状态,返回0表示执行成功;
$$ 							   程序本身的PID号。

16.5 Shell编程之环境变量

Shell常见的变量之二环境变量,主要是在程序运行时需要设置,环境变量详解如下:

PATH  							命令所示路径,以冒号为分割;
HOME  							打印用户家目录;
SHELL 							显示当前Shell类型;
USER  							打印当前用户名;
ID    							打印当前用户id信息;
PWD   							显示当前所在路径;
TERM  							打印当前终端类型;
HOSTNAME      				    显示当前主机名。

16.6 Shell编程之用户变量

Shell常见的变量之三用户变量,用户变量又称为局部变量,主要用在Shell脚本内部或者临时局部使用,系统变量详解如下:

A=jfedu.net  					    自定义变量A;
N_SOFT=nginx-1.12.0.tar.gz  		自定义变量N_SOFT;
BACK_DIR=/data/backup/      	    自定义变量BACK_DIR;
IP1=192.168.1.11					自定义变量IP1;
IP2=192.168.1.12					自定义变量IP2。

创建Echo打印菜单Shell脚本,脚本代码如下:

#!/bin/bash
#auto install httpd 
#By author jfedu.net 2022
echo -e '\033[32m-----------------------------\033[0m'
FILE=httpd-2.2.31.tar.bz2
URL=http://mirrors.cnnic.cn/apache/httpd/
PREFIX=/usr/local/apache2/
echo -e "\033[36mPlease Select Install Menu:\033[0m"
echo
echo "1)官方下载Httpd文件包."
echo "2)解压apache源码包."
echo "3)编译安装Httpd服务器."
echo "4)启动HTTPD服务器."
echo -e '\033[32m-----------------------------\033[0m'
sleep 20

运行脚本,执行结果如图16-2所示:

在这里插入图片描述

图16-2 Echo打印菜单脚本

16.7 If条件语句实战

Linux Shell编程中,if、for、while、case等条件流程控制语句用的非常多,熟练掌握以上流程控制语句及语法的实验,对编写Shel脚本有非常大的益处。

If条件判断语句,通常以if开头,fi结尾。也可加入else或者elif进行多条件的判断,if表达式如下:

if  (表达式) 
语句1
else
语句2
fi

If语句Shell脚本编程案例如下:

(1) 比较两个整数大小。

#!/bin/bash
#By author jfedu.net 2022
NUM=100
if  (( $NUM > 4 )) ;then 
echo “The  Num  $NUM  more  than 4.”
else
echo “The  Num  $NUM  less   than 4.”
fi

(2) 判断系统目录是否存在。

#!/bin/bash
#judge DIR or Files
#By author jfedu.net 2022
if  [  !  -d  /data/20140515  -a  !  -d  /tmp/2022/  ];then 
mkdir  -p  /data/20140515
fi

If常见判断逻辑运算符详解:

-f	 					判断文件是否存在 eg: if [ -f filename ];
-d	 					判断目录是否存在 eg: if [ -d dir     ];
-eq						等于,应用于整型比较 equal;
-ne						不等于,应用于整型比较 not equal;
-lt						小于,应用于整型比较 letter;
-gt						大于,应用于整型比较 greater;
-le						小于或等于,应用于整型比较;
-ge 					    大于或等于,应用于整型比较;
-a						双方都成立(and) 逻辑表达式 –a 逻辑表达式;
-o						单方成立(or) 逻辑表达式 –o 逻辑表达式;
-z						空字符串;
||      				    单方成立;
&&      				双方都成立表达式。

(3) if多个条件测试分数判断。

#!/bin/bash
#By author jfedu.net 2022
scores=$1
if  [[ $scores -eq 100 ]]; then
    echo "very good!";
elif [[ $scores -gt 85 ]]; then
    echo "good!";
elif [[ $scores -gt 60 ]]; then
    echo "pass!";
elif [[ $scores -lt 60 ]]; then
    echo "no pass!"
fi

16.8 MySQL数据库备份脚本

MySQL数据库备份是运维工程师的工作之一,如下为自动备份Mysql数据库脚本。

#!/bin/bash 
#auto backup mysql
#By author jfedu.net 2022
#Define PATH定义变量
BAK_DIR=/data/backu

标签:脚本,bin,Shell,变量,16,编程,echo
From: https://blog.csdn.net/lihuhelihu/article/details/143796067

相关文章

  • [转]Windows下编写的shell脚本,传到Linux执行出现bad interpreter:No such file or di
    原文地址:badinterpreter:Nosuchfileordirectory解决方法-jprothwell-博客园在Linux中执行.sh脚本,异常/bin/sh^M:badinterpreter:No such file or directory。分析:这是不同系统编码格式引起的:在windows系统中编辑的.sh文件可能有不可见字符,所以在Linux系统下执......
  • 国标GB28181-2016平台LiteGBS国标GB28181软件如何查看海康硬盘录像机NVR4.0lite的ip通
    随着视频技术的不断进步,视频监控、直播、执法记录仪等多种视频资源的应用场景愈发广泛且多样化。LiteGBS国标GB28181软件不仅在数量上快速增长,更在质量、格式及编码标准等方面展现出极高的多样性。因此,为了实现对这些资源的有效整合和统一管理输出,信息化项目中对于视频综合接入能......
  • 仓颉原生应用编程语言教程(第5期)
    泛型视频:KCKCJY在现代软件开发中,泛型编程已成为提高代码质量、复用性和灵活性的关键技术。泛型作为一种参数化多态技术,允许开发者在定义类型或函数时使用类型作为参数,从而创建可适用于多种数据类型的通用代码结构。泛型带来的好处包括:代码复用:能够定义可操作多种类型的通用算法......
  • 国标GB28181-2016平台LiteGBS国标GB28181视频平台球机安装好后发现云台不受控制的解决
    随着视频技术的不断进步,视频监控、直播、执法记录仪等多种视频资源的应用场景愈发广泛且多样化。LiteGBS国标GB28181视频平台不仅在数量上快速增长,更在质量、格式及编码标准等方面展现出极高的多样性。因此,为了实现对这些资源的有效整合和统一管理输出,信息化项目中对于视频综合接......
  • Shell并发执行
    在Shell脚本中,实现并发执行可以显著提高处理效率,特别是在处理大量任务或需要同时执行多个命令时。以下是一些常见的方法来实现Shell并发执行:1.使用&符号通过在命令末尾添加&符号,可以将命令放到后台运行,从而实现并发执行#!/bin/bashcommand1&command2&这种方法简单易用,......
  • Springboot彩妆专卖分享平台的设计与实现31682(程序+源码+数据库+调试部署+开发环境)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表用户,美妆教程,美妆分类,美妆产品,美妆知识开题报告内容一、研究背景与意义随着社交媒体的兴起和人们对美的追求,彩妆已经成为现代女性生活中不可或缺的一部分。......
  • 【FMC128D】基于VITA57.1标准的8通道250MSPS采样率16位AD采集FMC子卡(直流耦合)
    ​ 产品概述FMC128D是一款8通道250MHz采样率16位分辨率直流耦合AD采集FMC子卡,符合VITA57.1规范,可以作为一个理想的IO模块耦合至FPGA前端,8通道AD将模拟信号数字化后通过高带宽的FMC连接器(HPC)连接至FPGA,从而大大降低了系统信号延迟。该板卡支持板上可编程采样时钟和外部参考时钟......
  • 在 PowerShell 中,执行 ipconfig /flushdns 是清除本地 DNS 缓存的标准方式。PowerShel
    在PowerShell中,执行ipconfig/flushdns是清除本地DNS缓存的标准方式。如果你希望在PowerShell脚本中实时清理DNS缓存,你可以直接执行ipconfig/flushdns命令,并输出一些提示信息来确认操作已完成。PowerShell实时清理DNS缓存代码:powershellCopyCode#执行ipconf......
  • 在 Windows 中,RDP(远程桌面协议)默认使用 3389 端口。如果你想通过 PowerShell 更改此端
    在Windows中,RDP(远程桌面协议)默认使用3389端口。如果你想通过PowerShell更改此端口为10010,你需要修改注册表设置并重启远程桌面服务。以下是使用PowerShell更改RDP端口为10010的步骤:步骤:以管理员身份运行PowerShell。执行以下命令修改注册表,修改RDP端口设置:p......
  • 16章15节:五大ROC曲线扩展包的对比,和其它评估曲线的绘制
    在机器学习和统计建模中,评估模型性能是至关重要的步骤。为了帮助研究人员和数据科学家更好地评估和可视化分类模型的效果,R语言提供了多个扩展包。本文将介绍几种常见的扩展包,主要包括ROCR、PROC、PRROC、以及ROCit等。首先,我们将详细探讨ROCR包的功能,重点介绍如何利用该包绘制R......