首页 > 系统相关 >初学者必看:Shell 编程入门与应用概述

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

时间:2024-09-28 23:50:30浏览次数:3  
标签:文件 Shell 重定向 必看 命令 sh 初学者 输入

 

目录

 引言

一、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进行日常的系统管理和脚本编写,极大地提高工作效率和自动化水平。

标签:文件,Shell,重定向,必看,命令,sh,初学者,输入
From: https://blog.csdn.net/yoona333/article/details/142442231

相关文章

  • shell 变量里的变量
    前言全局说明变量里的变量。一、说明环境:Ubuntu18.04.6LTS(Linuxqt-vm5.4.0-150-generic#167~18.04.1-UbuntuSMPWedMay2400:51:42UTC2023x86_64x86_64x86_64GNU/Linux)pythonPython2.7.17(default,Mar82023,18:40:28)[GCC7.5.0]onlinux2pytho......
  • 学习C++ 必看的书,你看过几本了?
    我会陆续把这些书的电子版放到我的资源中,需要的朋友可以下载,都是免积分的。C++PrimerC++沉思录EffectiveSTLeffectivec++STL源码剖析EssentialC++ExceptionalC++InsidetheC++ObjectModelModernC++DesignMoreEffectiveC++MoreExceptionalC++TheC+......
  • golang shell
    packageshellimport( "context" "fmt" "os/exec" "time")//自定义输出结构体typecustomOutputstruct{ outPutchanstring resetCtxchanstruct{}}//Write将输出写入到customOutput结构体中,并通知重置超时。func(ccustomOutput......
  • FFmpeg 初学者需要掌握的基础知识和实用技能。每个部分可以深入讲解,提供具体的命令示
    FFmpeg初级使用教程大纲1. FFmpeg简介什么是FFmpegFFmpeg的主要功能安装FFmpeg2. 基本命令格式FFmpeg的基本命令结构输入与输出文件的指定常用选项的介绍3. 常用命令示例转换视频格式示例:将MP4转换为AVI提取音频示例:从视频中提取音频压缩视......
  • rust运行shell命令并获取输出
    usestd::io::{BufReader,BufRead};usestd::process::{self,Command,Stdio};fnmain(){ls();ps();xargs();time();iostat();}//不带参数命令fnls(){letoutput=Command::new("ls").output().expect("执行异常,提示");......
  • PowerShell 脚本禁用 Realtek Audio Console 中的前面板插孔检测,通常需要修改注册表项
     PowerShell脚本禁用RealtekAudioConsole中的前面板插孔检测,通常需要修改注册表项。以下是一个示例脚本,用于执行此操作:powershellCopyCode#设置注册表路径$registryPath="HKLM:\SOFTWARE\Realtek\Audio\RtkNGUI\Settings"#检查注册表路径是否存在if(-not(Test-......
  • 【小白必看】2025年PMP备考指南,pmp考试是什么?有没有含金量?值得考吗?(附资料)
    一、PMP考试是什么PMP全称是项目管理专业人士资格认证,它是由PMI(美国项目管理协会)组织和出题的,用于筛选项目管理人才的考试。从本意上理解就跟我们平时的资格认证考试差不多,门槛低,是个入门考试,目前为止选择题,通过率还挺高的。PMP认证在世界上两百多个国家和地区得到高度认可......
  • 必看!Air780EP 4G模组—AT开发FOTA远程升级之路
    Air780EP是合宙推出的一款低功耗4G全网通模组,兼容模组行业1618经典封装,支持OpenCPU开发及全功能数传AT开发,可广泛应用于多样化的物联网终端。针对用户朋友的应用反馈,本文特别推出基于Air780EP模组AT开发的FOTA远程升级指南——AT版本的远程升级主要是对AT固件版本进行升级,实......
  • shell基础知识
    shell基础知识前言Shell是一个应用程序,它连接了用户和Linux内核,让用户能够更加高效、安全、低成本地使用Linux内核,这就是Shell的本质。然而Shell本身并不是内核的一部分,它只是站在内核的基础上编写的一个应用程序,但是Shell也有着它的特殊性,就是开机立马启动,并呈现在......
  • 【春秋招必看】Unity相关笔试面试题(内有完整答案)第五期
    欢迎来到光光的奇妙冒险,我是你们的煎饼光子老师。今天是我们的第五期笔试面试题总结。C#部分:1、以上代码,谁的效率更高?为什么?答案:代码2的效率更高因为List的本质是数组,在初始化时,如果不默认为其指明分配多少容量,它会不断扩容扩容会带来效率的降低和垃圾的产生效率的降......