当前位置: 首页 > article >正文

Ubuntu的shell脚本

关于shell脚本

• shell脚本是文本的一种。               

• shell脚本是可以运行的文本。

• shell脚本的内容是由说辑和数据组成。   

• shell 脚本是解释型语言。

shell脚本存在的意义

        Shell脚本语言是实现Linux/UNIX系统管理及自动化运维所必备的重要工具

        Linux/UNIX系统的底层及基础应用软件的核心大都涉及Shell脚本的内容。

        每一个合格的Linux运维工程师,都需要能够熟练地编写Shell脚本语言,并能够阅读系统及各类软件附带的Shell脚本内容。

        一次编编写永久受益

注意:系统支持的shell类型可以查看/etc/shells

常见shell种类有: 

        Bourne Shell(/usr/bin/sh或/bin/sh):标识为sh,该Shell由Steve Bourne在贝尔实验室时编写。在许多Unix系统中,该Shell是root用户的默认的Shell。

        Bourne Again Shell(/bin/bash):标识为bash,该Shell由Brian Fox在1987年编写,是绝大多数发行版的默认的Shell,当运行sh时其实调用的是bash。

        C Shell(/usr/bin/csh):标识为csh,该Shell由Bill Joy在BSD系统上开发。由于其语法类似于C语言,因此称为C Shell。

        K Shell(/usr/bin/ksh):标识为ksh,该Shell由贝尔实验室的David Korn在二十世纪八十年代早期编写。它完全向上兼容 Bourne Shell 并包含了C Shell 的很多特性。

shell脚本中的基本元素

建立脚本

# mkdir script

# cd script/

# vim timinglee

# file timinglee 运行结果:

脚本的基本结构

        脚本幻数:即脚本解释器,脚本运行的最优先指令,负责对脚本中其他命令进行解释

        程序主题:程序主体通常由命令,执行逻辑控制器和数据组成

        注释:脚本中的说明文字,不参与脚本执行,只是对脚本中的代码进行说明

脚本中的注释方法

脚本中通常用 # 号注释单行内容

# vim lee.sh

# sh lee.sh   运行结果:

多行注释

# sh lee.sh   运行结果:

脚本的书写规范

书写规范注意事项

        脚本文件名应见名知意,例如backup_mysql.sh

        文件开头指定脚本解释器 #!/bin/sh 或 #!/bin/bash

        脚本中尽量不要用中文注释,防止本机或切换系统环境后中文乱码的困扰

        多使用内部命令,如:echo、eval、exec、export、read、shift、exit

        尽量用少的命令完成动作

# cat /etc/passwd | grep root

# grep root /etc/passwd

运行结果相同:

开头加版本特权等信息

# Author:作者

# Date:创建日期

# Version:版本

# Mail:联系方式

# Info:对软件信息进行描述

# Function:功能

注意:利用缩进体现代码结构,更加利于后期阅读

vim用于书写脚本的设定

        在编写一个脚本呢时我们需要书写一些主属性信息用来利与脚本阅读

        如果每次都手写这些信息,很显然有做了很多重复动作

        用vim的自动编写功能可以实现对于这些重复动作的简化

脚本书写设置

# vim ~/.vimrc           【设置家目录脚本书写格式】

set ts=4 sw=4 ai et        

ts=4表示一个Tab键是4个空格,sw=4缩进长度为4ai表示自动缩进(这一行有Tab键,按回车键下一行会自动缩进,长度被Tab键固定),et表示把Tab键转换成空格 

脚本执行方法

在当前环境下运行

# vim test.sh

# . test.sh         【当前环境作解释器调用脚本】

# ps f  运行结果:

# source test.sh

# ps f  运行结果:

在指定环境中运行

# sh test.sh        【脚本没有可执行权限时使用的方法("sh" ,". " ,"source")】

# ps f  运行结果:

# chmod +x test.sh      【为脚本添加可执行权限】

# ./ test.sh

# /root/script/test.sh

# ps f  运行结果:

. test.sh./ test.sh区别:" . "点+空格不会开新环境,"./"在当前环境,不能在根目录运行。

脚本调试

脚本在执行过程中如果出现问题,单从脚本的执行报错中找问题困难比较大,如果在执行时显示执行过程这样就可以快速定位脚本的问题所在

# vim lee.sh

# sh lee.sh运行结果:

# sh -x lee.sh运行结果:

命令退出值

什么退出值

在UNIX或者Linux中,每个命令都会返回一个退出状态码

退出状态码是一个整数,其有效范围为0~255

通常情况下,成功的命令返回0,而不成功的命令返回非0值。非0值通常都被解释成一个错误码行为良好的UNIX命令,程序和工具都会返回0作为退出码来表示成功。

查看退出值

# echo $?             【查看退出值,0表示没有错误】

没有目录查看退出值

有目录查看退出值

修改脚本退出值

# vim lee.sh

# sh lee.sh

# echo $?

练习:使用脚本查找指定网卡的IP地址

# sh test.sh ens160      【使用脚本查看网卡IP地址】

http://www.lryc.cn/news/2392505.html

相关文章:

  • 微信小程序页面嵌套web-view点击系统导航返回时进行弹窗处理
  • 从抄表到节能,电费管理系统如何重构公寓运营场景——仙盟创梦IDE
  • Rust 学习笔记:关于闭包的练习题
  • 记一次前端逻辑绕过登录到内网挖掘
  • 有什么excel.js支持IE11,可以显示EXCEL单元格数据,支持单元格合并,边框线,单元格背景
  • x86 与 ARM 汇编深度对比:聚焦 x86 汇编的独特魅力
  • Springboot 整合 WebSocket 实现聊天室功能
  • 用 Trae IDE 打造一个桌面小爬虫:从 PyQt5 开始,轻松采集掘金首页内容
  • python和风api获取天气(JSON Web Token)
  • 模板应用更新同步到所有开发中的应用
  • git和gitee的常用语句命令
  • 52、C# 泛型 (Generics)
  • 理解 Vue 2 的响应式原理:数据劫持与依赖收集的背后
  • 深入理解 Pinia:Vue 状态管理的革新与实践
  • Dubbo高频面试题
  • Allegro X PCB设计小诀窍--05.如何在Allegro X中实现隐藏电源飞线效果
  • 一篇文章教会你ESP8266串口WIFI无线模块实现物联网无线收发,附STM32代码示例
  • 算法-基础算法
  • 特种设备作业人员-G3锅炉水处理如何备考学习?
  • Reactor模式详解:高并发场景下的事件驱动架构
  • UniApp 生产批次管理模块技术文档
  • 项目日记 -Qt音乐播放器 -设置任务栏图标与托盘图标
  • 国产 BIM 软件万翼斗拱的技术突破与现实差距 —— 在创新与迭代中寻找破局之路
  • 记录算法笔记(2025.5.29)最小栈
  • Android SurfaceFlinger核心工作机制
  • Golang|etcd服务注册与发现 策略模式
  • 深度解析UniApp盲盒系统开发:从源码架构到多端部署全流程
  • STM32的OLED显示程序亲测可用:适用于多种场景的稳定显示解决方案
  • 【AI News | 20250529】每日AI进展
  • Day12 - 计算机网络 - HTTP