初学者必看:Shell 编程入门与应用概述

 

目录

 引言

一、Shell概述——什么是shell?

二、Shell概述——shell功能

三、Shell概述——命令解释

四、Shell概述——程序执行

1、创建shell文件

2、运行 Shell 脚本有两种方法:

①作为可执行程序

②作为解释器参数

五、Shell概述——输入输出重定向

1、输出重定向(>)

2、输入重定向(<)

六、重定向深入讲解

七、Shell概述——管道

总结


引言

       在现代计算机操作系统中,Shell 作为用户与系统内核之间的重要桥梁,扮演着不可或缺的角色。它不仅提供了一个命令行界面,方便用户输入和执行命令,还允许用户通过编写脚本实现复杂的自动化任务。通过掌握Shell的基本功能和用法,用户可以高效地管理系统、处理数据,并提升工作效率。

一、Shell概述——什么是shell?

Shell是操作系统中用户与内核(kernel)进行交互的一种接口,它接收用户输入的命令并把它送入操作系统去执行,然后将执行结果返回给用户。

Shell也被称为命令行界面或终端。

Shell 不仅仅是一个命令行解释器,它也是一种强大的编程语言,允许用户编写脚本来自动化执行一系列命令。

二、Shell概述——shell功能

命令解释:Shell 接收用户输入的命令,并解释这些命令,然后将其传递给操作系统内核去执行。Shell是操作系统中用户与内核(kernel)进行交互的一种接口,它接收用户输入的命令并把它送入操作系统去执行,然后将执行结果返回给用户。

程序执行Shell 可以直接执行程序,也可以作为程序的解释器来执行脚本。脚本是一系列命令的集合,Shell 可以按照脚本中的顺序执行这些命令。

输入输出重定向Shell 允许用户将命令的输入重定向到文件,或将命令的输出保存到文件中,从而实现数据的自动化处理。

管道(Pipeline)Shell 支持管道功能,可以将一个命令的输出作为另一个命令的输入,从而实现命令的串联执行。

三、Shell概述——命令解释

例如,ls命令会被Shell解析并解释为列出当前目录下的文件和文件夹的命令,然后 Shell 会调用相应的系统调用来执行这个操作。

四、Shell概述——程序执行

1、创建shell文件

有两种方法:

①用touch命令来创建

vi/vim命令来创建文件,vi/vim用于打开文本编辑器,如果你打开的.sh文件不存在的话,会根据你输入的文件名创建一个。

使用touch命令来创建sh文件,ls命令可以查看文件是否创建成功。

2、打开文本编辑器(可以使用 vi/vim 命令来创建文件),新建一个文件 test.sh,扩展名为 sh(sh代表shell),扩展名并不影响脚本执行,见名知意就好,如果你用 php 写 shell 脚本,扩展名就用 php 好了。(我这里没有安装vim,可以根据提示进行安装,我换成用vi来打开sh文件。)

进入编辑模式了,我们复制下面的两行代码写入进去。然后输入 :wq 退出并保存。

输入一些代码,第一行一般是这样

#!/bin/bash

echo “hello ahead”

#! 是一个约定的标记,它告诉系统这个脚本需要什么解释器来执行,即使用哪一种 Shell。

echo 命令用于向窗口输出文本。

2、运行 Shell 脚本有两种方法:

①作为可执行程序

将上面的代码保存为 test.sh,并 cd 到相应目录:

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 告诉系统说,就在当前目录找

作为解释器参数

这种运行方式是,直接运行解释器,其参数就是 shell 脚本的文件名,如:

/bin/sh test.sh

这种方式运行的脚本,不需要在第一行指定解释器信息。

五、Shell概述——输入输出重定向

Shell允许用户将命令的输入重定向到文件,或将命令的输出保存到文件中。这通过 >(输出重定向)和 <(输入重定向)等符号实现。例如,ls > files.txt  命令会将ls命令的输出(即当前目录下的文件和文件夹列表)保存到files.txt文件中,而不是显示在屏幕上。

1、输出重定向(>)

输出重定向:将一个程序的标准输出写到一个文件中

输出重定向会覆盖文件内容,如果不希望文件内容被覆盖,可以使用 >> 追加到文件末尾.

即输入:  ls >> study.txt

就会在文件末尾追加内容。

2、输入重定向(<)

输入重定向:把文件里面的内容输入到变量line里再打印出来。

while IFS= read -r line; do echo "$line"; done < study.txt

         这个脚本使用while循环和输入重定向来逐行读取study.txt文件的内容。对于文件中的每一行,它都会将该行赋值给变量line,并打印出来。这里使用了IFS=(内部字段分隔符设置为空)
和 -r(避免反斜杠转义)选项来确保read命令按预期工作。

六、重定向深入讲解

一般情况下,每个 Unix/Linux 命令运行时都会打开三个文件:

  • 标准输入文件(stdin):stdin的文件描述符为0,Unix程序默认从stdin读取数据。
  • 标准输出文件(stdout):stdout 的文件描述符为1,Unix程序默认向stdout输出数据。
  • 标准错误文件(stderr):stderr的文件描述符为2,Unix程序会向stderr流中写入错误信息。

默认情况下,command > file 将 stdout 重定向到 file,command < file 将stdin 重定向到 file。

如果希望 stderr 重定向到 file,可以这样写:

$ command 2>file

如果希望 stderr 追加到 file 文件末尾,可以这样写:

$ command 2>>file

如果希望将 stdout 和 stderr 合并后重定向到 file,可以这样写:

$ command > file 2>&1

或者

$ command >> file 2>&1

如果希望对 stdin 和 stdout 都重定向,可以这样写:

$ command < file1 >file2

command 命令将 stdin 重定向到 file1,将 stdout 重定向到 file2。

注意:0 是标准输入(STDIN),1 是标准输出(STDOUT),2 是标准错误输出(STDERR)。

这里的 2 和 > 之间不可以有空格,2> 是一体的时候才表示错误输出。

七、Shell概述——管道

        管道是直接将一个程序的标准输出与另一个程序的标准输入相连接,不需要经过任何中间文件,通过 | 符号实现

        例如,cat study.txt | grep "a"  命令会先使用cat命令读取 study.txt文件的内容,然后通过管道将这些内容传递给grep命令,grep命令再从中搜索包含"a"的行。

cat study.txt | grep "a"

总结

        通过对Shell的深入了解,我们可以发现它不仅是一个简单的命令行工具,更是一个强大的编程环境。无论是命令的解释执行、输入输出重定向,还是管道的使用,Shell都为用户提供了灵活的操作方式。掌握这些知识后,用户能够更加自信地使用Shell进行日常的系统管理和脚本编写,极大地提高工作效率和自动化水平。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yoona1020

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值