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或普通用户
- 在实际应用中,应更具脚本的功能和安全需求,选择适合的用户来执行脚本程序。