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

Shell编程简介

1 Shell概述

1.1 Shell的定义

Shell在计算机科学中是指为使用者提供操作界面的软件,即命令解析器,类似于windows下的cmd.exe,接收用户命令并调用应用程序。

Shell俗称壳,用于区别于核,它作为用户与操作系统内核之间的桥梁,让用户能通过简单命令操作复杂的系统。

1.2 常见的Shell类型

  • Windows中的cmd.exe

它是Windows系统中的命令行Shell,继承了COMMAND.COM的一些功能,并在此基础上进行了改进和扩展。

  • Windows中的PowerShell

PowerShell是微软开发的基于任务的命令行Shell和脚本语言,提供了更丰富的管理和自动化功能。

  • Linux中的bash

bash是Linux系统中广泛使用的Shell,具有强大的命令功能和脚本编程能力,深受Linux用户的喜爱。

1.3 Shell的主要用途

  • 命令行操作

用户可以通过Shell输入各种命令,如文件操作、进程管理等,实现对计算机系统的直接控制。

  • 系统管理

系统管理员利用Shell可以方便地管理系统资源、配置系统参数、监控系统状态等。

  • 脚本编程

Shell支持脚本编程,用户可以将一系列命令编写成脚本文件,实现自动化任务的执行。

  • 自动化任务

Shell能够帮助用户自动化重复性任务,提高工作效率,如批量文件处理、定时任务执行等。

1.4 Linux系统中的Shell

Linux 系统中的 Shell 是一个特殊的应用程序,它介于操作系统内核与用户之间,充当了一个“命令解释器”的角色,负责接收用户输入的操作指令(命令)并进行解释,将需要执行的操作传递给内核执行,并输出执行结果。

常见的 Shell 解释器程序有很多种,使用不同的 Shell 时,其内部指令、命令行提示符等方面会存在一些区别。

通过==/etc/shells==文件可以了解当前系统所支持的 Shell 脚本种类。

1.5 Bash

Bash(/bin/bash)是目前大多数 Linux 版本采用的默认Shell。Bash 的全称为 Bourne Again Shell。

由于易用和免费,Bash 在日常工作中被广泛使用,也是大多数Linux 系统默认的 Shell。

2 Shell编程

2.1 Shell脚本

Shell 脚本(shell script),是一种为 shell 编写的脚本程序。

业界所说的 shell 通常都是指 shell 脚本,但要知道,shell 和 shell script 是两个不同的概念。

这里出现的 “shell编程” 都是指 shell 脚本编程,不是指开发 shell 自身。

简单地说,只要将平时使用的各种 Linux 命令按顺序保存到一个文本文件中, 然后添加可执行权限,这个文件就成为一个 Shell 脚本了。

2.2 编写脚本程序

  • 新建 HelloWorld.sh 文件
vim /test/HelloWorld.sh
  • 写入以下内容后保存退出
#!/bin/bash
pwd
echo "Hello World!"
  • 为HelloWorld.sh 文件添加可执行权限
chmod a+x ./HelloWorld.sh
  • 执行shell脚本文件(在脚本文件所在目录)
# 方法一
./HelloWorld.sh
# 方法二
/bin/bash ./HelloWorld.sh
/bin/sh ./HelloWorld.sh
# 方法三
source ./HelloWorld.sh

最好写成 ./HelloWorld.sh,而不是 HelloWorld.sh,运行其它二进制的程序也一样。

直接写 HelloWorld.sh,linux 系统会去 PATH (系统变量)里寻找有没有叫 HelloWorld.sh 的,而只有 /bin,/sbin,/usr/bin,/usr/sbin 等在 PATH 里,当前目录通常不在 PATH 里。

所以写成 HelloWorld.sh 是会找不到命令的,要用 ./HelloWorld.sh 告诉系统说,就在当前目录找。

2.3 不同执行方法的区别

2.3.1 source命令

在当前 bash 环境下读取并执行 FileName 中的命令,可以无 “执行权限”

该命令通常用命令. FileName来替代。

语法:source FileName

2.3.2 sh、bash命令

打开一个子 shell 来读取并执行 FileName 中命令,可以无 “执行权限”。

运行一个shell脚本时会启动另一个命令解释器。

语法:/bin/sh FileName 或 /bin/bash FileName

2.3.3 ./命令

打开一个子 shell 来读取并执行 FileName 中命令,需要 “执行权限”

运行一个 shell 脚本时会启动另一个命令解释器。

语法:./FileName

3 Shell编程规范

一个合格的 Shell 脚本程序应该遵循标准的脚本结构,而且能够输出友好的提示信息,更加容易读懂。

对于代码较多,结构复杂的脚本,应添加必要的注释文字。

第一行“#!/bin/bash”是一行特殊的脚本声明,表示此行以后的语句通过/bin/bash 程序来解释执行。

其他以“#”开头的语句表示注释信息。

开头的注释通常是:编写者编写时间脚本的功能、参数的个数以及类型。

Shell脚本中的程序命令(/bin,/sbin),最好写完整的绝对路径,否则可能执行不成功。

  • vim /test/HelloWorld.sh
#!/bin/bash
# zzh 2025-7-17 学习测试
/usr/bin/pwd
/usr/bin/echo "Hello World!"
/usr/bin/echo "脚本执行完毕!"

4 执行权限

Linux脚本程序可以使用任何用户执行,但通常取决于脚本的具体需求和权限要求,以
下是几种常见情况:

  • 普通用户执行

大多数脚本可有普通用户执行,适用于日常任务和不需要特殊权限的操作

  • root用户执行

需要系统级权限的脚本,如系统配置、服务管理等,通常需要root用户或通过sudo命令执行

  • 特定用户执行

某些脚本可能需要特点用户的权限和环境变量来执行,例如与特定应用程序或用户相关的脚本

  • 无人执行(定时任务)

通过cron等定时任务执行的脚本,通常由设置任务的用户身份执行,可以是root或普通用户

  • 在实际应用中,应更具脚本的功能和安全需求,选择适合的用户来执行脚本程序。
http://www.lryc.cn/news/591604.html

相关文章:

  • 解决leetcode第3614题用特殊操作处理字符串II
  • DolphinScheduler 如何高效调度 AnalyticDB on Spark 作业?
  • Redis学习-02安装Redis(Ubuntu版本)、开启远程连接
  • leetcode 206.反转链表(c++详细解释)
  • LeetCode--48.旋转图像
  • ACOUSLIC-AI挑战报告:基于低收入国家盲扫超声数据的胎儿腹围测量|文献速递-医学影像算法文献分享
  • Leetcode 03 java
  • 记录Leetcode中的报错问题
  • Java数组补充v2
  • sqli-labs靶场通关笔记:第25-26a关 and、or、空格和注释符多重过滤
  • 融智兴科技: RFID超高频洗涤标签解析
  • 代码随想录算法训练营第二十三天
  • Java 中的类和对象
  • 数据结构自学Day9: 二叉树的遍历
  • Git简介与特点:从Linux到分布式版本控制的革命
  • redis中间件
  • git merge-base查看某个分支从哪里拉出来的、主main分支上的某个时间之后某人的提交合并到特定分支(使用 cherry-pick 的场景)
  • 【MySQL事务】事务的隔离级别
  • 逆向破解京东评论加密参数|Python动态Cookie解决方案
  • 开源Agent平台Dify源码剖析系列(五)核心模块core/agent之CotChatAgentRunner
  • 文字转图片的字符画生成工具
  • 今日行情明日机会——20250717
  • Web3.0 实战项目、简历打造、精准投递+面试准备
  • springboot 整合spring-kafka客户端:SASL_SSL+PLAINTEXT方式
  • 流式数据处理实战:用状态机 + scan 优雅过滤 AI 响应中的 `<think>` 标签
  • 面试高频题 力扣 200.岛屿数量 洪水灌溉 深度优先遍历 暴力搜索 C++解题思路 每日一题
  • 【Lua】题目小练1
  • 50天50个小项目 (Vue3 + Tailwindcss V4) ✨ | GoodCheapFast(Good - Cheap - Fast三选二开关)
  • yolo8+ASR+NLP+TTS(视觉语音助手)
  • RK3566开发板调试记录:从编译配置到功能优化