【Linux Shell】1. Shell 简述

文章目录

  • [【 1. Shell 解释器、Shell语言、Shell脚本 】](#【 1. Shell 解释器、Shell语言、Shell脚本 】)
  • [【 2. Shell 环境 】](#【 2. Shell 环境 】)
  • [【 3. 一个简单的 Shell 脚本 】](#【 3. 一个简单的 Shell 脚本 】)
    • [3.1 Shell 脚本的编写](#3.1 Shell 脚本的编写)
    • [3.2 Shell 脚本的运行](#3.2 Shell 脚本的运行)
      • [3.2.1 作为可执行程序运行 Shell 脚本](#3.2.1 作为可执行程序运行 Shell 脚本)
      • [3.2.2 作为解释器参数运行 Shell 脚本](#3.2.2 作为解释器参数运行 Shell 脚本)

【 1. Shell 解释器、Shell语言、Shell脚本 】

  • Shell 原本是一个应用程序,即 命令行解释器(如下所示),它为用户提供了一个向Linux内核发送请求以便运行程序的界面系统级程序,用户可以用 shell 来启动、挂起、停止甚至是编写一些程序。在 Shell 中可以直接调用Linux系统命令。
  • Shell 脚本是利用利用 Shell 的功能所写的一个程序 ,这个程序是使用纯文本文件,将一些 shell 的语法与指令(含外部指令)写在里面, 搭配正规表示法、管线命令与数据流重导向等功能,以达到我们所想要的处理目的。类似于 批处理文件,一次执行多个指令。不需要编译。
  • Shell 语言是一个利用 C语言编写的程序,用于编写 Shell 脚本。

【 2. Shell 环境 】

  • Shell 编程跟 JavaScript、php 编程一样,只要有一个能编写代码的文本编辑器和一个能解释执行的脚本解释器就可以了。
  • Linux 的 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)...
  • 而 bash,也就是 Bourne Again Shell,由于易用和免费,Bash 在日常工作中被广泛使用。同时, Bash 也是大多数Linux 系统默认的 Shell 。
  • 在一般情况下,人们并不区分 Bourne Shell 和 Bourne Again Shell,所以,像 #!/bin/sh,它同样也可以改为 #!/bin/bash。#! 告诉系统其后路径所指定的程序即是解释此脚本文件的 Shell 程序。

【 3. 一个简单的 Shell 脚本 】

3.1 Shell 脚本的编写

  • 打开文本编辑器(可以使用 vi/vim 命令来创建文件),新建一个文件 test.sh,扩展名为 sh(sh代表shell),扩展名并不影响脚本执行,见名知意就好,如果用 php 写 shell 脚本,扩展名就用 php 好了。输入代码如下:
cpp 复制代码
#!/bin/bash
echo "Hello World !"
  • #! 是一个约定的标记,它告诉系统这个脚本需要什么解释器来执行,即使用哪一种 Shell。
  • echo 命令用于向窗口输出文本。

3.2 Shell 脚本的运行

3.2.1 作为可执行程序运行 Shell 脚本

  • 将上面的代码保存为 test.sh,并 cd 到相应目录:
cpp 复制代码
chmod +x ./test.sh  #使脚本具有执行权限
./test.sh  #执行脚本
  • 注意, 一定要写成 ./test.sh,而不是 test.sh,运行其它二进制的程序也一样,直接写 test.sh,linux 系统会去 PATH 里寻找有没有叫 test.sh 的,而只有 /bin, /sbin, /usr/bin,/usr/sbin 等在 PATH 里,你的当前目录通常不在 PATH 里,所以写成 test.sh 是会找不到命令的,要用 ./test.sh 告诉系统说,就在当前目录找。

3.2.2 作为解释器参数运行 Shell 脚本

  • 这种运行方式是,直接运行解释器, 不需要在第一行指定解释器信息,写了也没用,其参数就是 shell 脚本的文件名,如下所示
cpp 复制代码
/bin/sh test.sh
相关推荐
hjlgs44 分钟前
Kernel5.4 Timer定时器使用
linux
Do_GH1 小时前
【Linux】02.WSL搭建Linux环境
linux·运维·服务器
「QT(C++)开发工程师」1 小时前
C++语言编程规范-并发
java·linux·c++
乌萨奇也要立志学C++2 小时前
【Linux】进程控制(三) 自定义 Shell 命令行解释器的实现与进程协作实践
linux·运维·服务器
qiuiuiu4132 小时前
正点原子RK3568学习日志6-驱动模块传参
linux·c语言·开发语言·单片机·学习
dddddppppp1232 小时前
linux sdl图形编程之helloworld.
linux·运维·ffmpeg
郝学胜-神的一滴3 小时前
Linux系统函数link、unlink与dentry的关系及使用注意事项
linux·运维·服务器·开发语言·前端·c++
Pota-to成长日记3 小时前
2025/10/14 redis断联 没有IPv4地址 (自用)
linux·运维·服务器
樱木...3 小时前
Linux 查询目录下文件大小引发的内存溢出问题
linux·运维
.小墨迹3 小时前
linux删除通过源码安装的库
linux·运维·chrome