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

Shell编程基础

Shell编程基础

      • 1、Shell脚本概述
      • 2、变量与参数传递
      • 3、Shell运算符
      • 4、输出、重定向与管道符
      • 5、控制结构(三大结构)
      • 6、函数与模块化编程
      • 7、Shell文本处理




1、Shell脚本概述


1.1、什么是Shell脚本

Shell脚本是一种用Shell语言编写的脚本程序。Shell既是一种命令语言,又是一种程序设计语言

在Unix和类Unix环境(例如Linux和Mac OS)下,我们可以通过Shell来与操作系统进行交互

Shell脚本就像是一个命令序列的集合,将这些命令写入一个文件,就构成了一个Shell脚本

1.2、Shell脚本的应用场景

Shell脚本的主要作用是自动化执行常用命令和任务,节省手动执行的时间和精力。具体的应用场景非常广泛,例如:

  • 系统管理:自动化安装和配置软件,系统监控,日志分析等
  • 文件操作:批量修改文件名,备份和恢复数据等
  • 测试:自动化测试,性能监测等

1.3、创建和执行一个Shell脚本

1)创建一个Shell脚本

通常,Shell脚本的文件名以.sh(代表Shell)为后缀。可以使用vi/vim命令来创建一个Shell脚本文件,然后输入Shell命令即可

例如,创建一个名为hello.sh的Shell脚本:

vim ./hello.sh

在Shell脚本文件中写入一条命令:

#!/bin/bash
echo "Hello, World!"

需要注意的是,每个Shell脚本应以#!/bin/bash(或其他Shell解释器)开头,这称为Shebang,Shebang告诉系统使用哪个Shell解释器来执行脚本

例如,以#!/bin/bash开头的⽂件,程序在执⾏时会调⽤/bin/bash,也就是Bash解释器; 以#!/usr/bin/python开头的⽂件,表示指定Python解释器来执行脚本文件

#!是一个约定的标记,它告诉系统根据Shebang中指定的解释器来执行脚本文件

2)执行一个Shell脚本

执行一个Shell脚本有两种方法:作为可执行程序和作为解释器参数

A、作为可执行程序

保存并关闭Shell脚本文件后,需要给该脚本文件添加执行权限:

chmod +x ./hello.sh

执行一个Shell脚本:

./hello.sh

一般写成./hello.sh,如果写成hello.sh,Linux系统会去系统变量PATH中寻找该文件

B、作为解释器参数

另一种执行方式是,直接运行解释器,其参数就是Shell脚本文件名,例如

sh hello.sh
python hello.sh

使用这种执行方式的脚本文件,不需要在第一行指定Shebang解释器信息,也无需给脚本文件添加执行权限

1.4、Shell脚本的编写规范

在编写Shell脚本时,应遵循一些基本的规范和最佳实践:

  • 每个Shell脚本应以#!/bin/bash(或其他Shell解释器)开头,这行告诉系统使用哪个Shell解释器来执行脚本
  • 脚本应具有清晰的结构和合理的注释,以便其他人(或未来的自己)理解它的作用和工作原理
  • 脚本应尽量避免使用硬编码的值,而是使用变量,这样更易于修改和重用代码
  • 脚本应检查其依赖项(例如必须的系统命令或环境变量)是否存在,如果不存在,应优雅地失败,并给出错误信息
  • 脚本应在可能的地方使用错误处理,例如,如果尝试删除一个不存在的文件,脚本应能处理这种错误情况
  • 如果脚本需要以特定的用户(例如root用户)身份运行,应在脚本开始处检查当前用户,如果不是预期用户,给出错误信息并退出

2、变量与参数传递


Shell变量与参数传递详见文章:传送门

3、Shell运算符


Shell运算符详见文章:传送门

4、输出、重定向与管道符


Shell输出、重定向与管道符详见文章:传送门

5、控制结构(三大结构)


Shell控制结构(三大结构)详见文章:传送门

6、函数与模块化编程


Shell函数与模块化编程详见文章:传送门

7、Shell文本处理


Shell文本处理详见文章:传送门



相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • HTML 转 PDF API 接口
  • IDA的安装和使用
  • 形态学运算合集
  • 港科夜闻 | 叶玉如校长出席2024科技+新质生产力高峰论坛发表专题演讲,贡献国家科技强国战略...
  • Python中的魔法方法(magic methods 或 special methods)-3
  • 如何在 PyTorch 中定义一个简单的卷积神经网络?
  • 主窗口的设计与开发(二)
  • LeetCode字母异位词分组
  • k8s介绍
  • UDP报文结构
  • PurchaseorderController
  • JDBC的介绍续
  • [数据集][目标检测]电动车头盔佩戴检测数据集VOC+YOLO格式4235张5类别
  • 《深入浅出WPF》读书笔记.11Template机制(上)
  • 如何编写Linux PCI设备驱动器 之一
  • android高仿小视频、应用锁、3种存储库、QQ小红点动画、仿支付宝图表等源码...
  • Android系统模拟器绘制实现概述
  • Django 博客开发教程 16 - 统计文章阅读量
  • Git同步原始仓库到Fork仓库中
  • HTTP--网络协议分层,http历史(二)
  • JavaScript类型识别
  • java概述
  • JDK 6和JDK 7中的substring()方法
  • js递归,无限分级树形折叠菜单
  • Laravel 菜鸟晋级之路
  • OSS Web直传 (文件图片)
  • React-Native - 收藏集 - 掘金
  • RxJS 实现摩斯密码(Morse) 【内附脑图】
  • Webpack入门之遇到的那些坑,系列示例Demo
  • XForms - 更强大的Form
  • 阿里云Kubernetes容器服务上体验Knative
  • 从tcpdump抓包看TCP/IP协议
  • 从零开始在ubuntu上搭建node开发环境
  • 从输入URL到页面加载发生了什么
  • 番外篇1:在Windows环境下安装JDK
  • 高程读书笔记 第六章 面向对象程序设计
  • 给github项目添加CI badge
  • 排序算法之--选择排序
  • 让你成为前端,后端或全栈开发程序员的进阶指南,一门学到老的技术
  • 入职第二天:使用koa搭建node server是种怎样的体验
  • 视频flv转mp4最快的几种方法(就是不用格式工厂)
  • 项目实战-Api的解决方案
  • 再次简单明了总结flex布局,一看就懂...
  • 在Unity中实现一个简单的消息管理器
  • - 转 Ext2.0 form使用实例
  • ​Python 3 新特性:类型注解
  • ​虚拟化系列介绍(十)
  • #绘制圆心_R语言——绘制一个诚意满满的圆 祝你2021圆圆满满
  • (Charles)如何抓取手机http的报文
  • (LeetCode C++)盛最多水的容器
  • (阿里巴巴 dubbo,有数据库,可执行 )dubbo zookeeper spring demo
  • (二) 初入MySQL 【数据库管理】
  • (附源码)apringboot计算机专业大学生就业指南 毕业设计061355
  • (南京观海微电子)——I3C协议介绍
  • (企业 / 公司项目)前端使用pingyin-pro将汉字转成拼音