Shell编程【万字Shell详细介绍带你入门建议收藏】

本文详细介绍了Shell的基础知识,包括Shell的起源、作用和类型,以及如何查看和修改默认Shell。深入讲解了Shell脚本的编写,涵盖基本结构、解释器、执行方式和权限设置。此外,还详细讨论了Shell编程基础,如输入输出、管道、字符、变量和运算。最后,分享了Shell编程的最佳实践,包括错误排查、调试模式、语法风格和示例应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1 Shell 基础介绍

1.1 Shell 简介

Shell 概述

  • Shell 是系统的用户界面,提供了用户与内核进行交互操作的一种接口
  • Shell 将用户输入的命令并且把它们送到内核去执行,然后返回执行结果
  • Shell 是可编程的,它允许用户编写由 Shell 命令组成的程序在这里插入图片描述

Shell 发展史

  • 1971 : Bell Labs 的 Ken Thompson 为 UNIX 开发了第一个 Shell: V6 Shell 是一个在内核之外执行的独立的用户程序
  • 1977 :Steven Bourne 在 AT&T Bell Labs 为 V7 UNIX 创建 Bourne shell
  • 1978 :Bill Joy 在伯克利分校攻读研究生期间为 BSD UNIX 系统开发的 csh
  • 1983 : Ken Greer 在卡内基-梅隆大学开发了 tcsh,将 C Shell 引入了 Tenex 系统中的一些功能,如命令行编辑功能和文件名和命令自动补全功能
  • 1983 :David Korn 在 AT&T Bell Labs 创建 korn shell,它功能更强大,提供关联数组表达式运算
  • 1989 :Bourne-Again Shell(或 Bash)是一个开源 GNU 项目,旨在取代 Bourne shell;Bash 由 Brian Fox 开发,已成为世上最流行的 Shell,它兼容 sh、csh、ksh,是 Linux 系统的默认 Shell

在 Linux 中,有多种 Shell 程序可供选择,比如 dash、csh、zsh 等,默认的 Shell 可以在 /bin/sh 查看,在etc/passwd 中修改。

查看Shell

查看系统默认安装的 Shell
cat /etc/shells
查看当前登录用户默认 Shell
echo $SHELL
查看当前的 Shell
echo $0

1.2 Shell 脚本(定义、作用、格式、权限及执行)

Shell 脚本基础知识

在 Unix/Linux 里,一个程序/命令只做好一件事;复杂的问题可以通过多个命令的组合来解决;形式最简单的 Shell 脚本就是一系列命令构成的可执行文件,并可以被其他脚本复用。编写风格良好易读的 Shell 脚本可以提高日常任务的自动化程度和准确性。

Shell 脚本的约束Shell 脚本可以完成很多任务,但不适用于所有情况

  • Shell 脚本可以完成很多任务,但不适用于所有情况
  • 对于可以通过调用其他命令行实用工具来完成的任务,Shell 脚本是一种不错的选择
  • Shell 脚本可以作为一种“胶水”语言,整合其他编程语言 当解决某个问题时,Shell 脚本实现起来复杂度高,效率低,此时就可以考虑使用其他编程语言。

Shell 脚本开发环境

可以在任意文本编辑器中打开新文件来创建 Shell 脚本。

高级编辑器如 Vim 和 Emacs,在识别文件的后缀为 .sh 后,可以提供语法高亮、检查、补全等功能。

[root@localhost~]# vim demo.sh     #新建一个脚本文件,并写入如下内容:
#!/bin/bash
echo "Hello World“
[root@localhost~]# sh demo.sh
Hello World

Shell 脚本指定解释器

Shell 脚本只是静态的代码,若要输出结果,还需要解释器的参与。一般在脚本的第一行,指定执行此脚本的解释器。如果不指定解释器,脚本也能在默认的解释器中正常运行,但出于规范和安全的考虑,建议指定如下:

#!/bin/bash

#!/bin/csh

执行 Shell 脚本

对于脚本文件,我们有两种执行方式:

sh script_name.sh
./script_name.sh

Linux 中一切皆文件,脚本/命令/程序都是一个文件,文件作为一个对象,具有权限的属性。在执行别人发送或从网上下载的脚本时可能会遇到权限问题,赋予执行权限可解决:

chmod +x script_name.sh

如果某个 Shell 脚本可执行,则可以通过在命令行中输入其名称调用.被成功调用的前提是,脚本所在路径包含在 $PATH 变量中

  • 查看 $PATH 变量
  • 修改 $PATH 变量
  • 查找某个命令/脚本的路径
[root@localhost~]# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
[root@localhost~]# PATH=$PATH:/New/path
[root@localhost ~]# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/New/path
#永久修改 $PATH 需要在 .bashrc 或 .bash_profile 中添加 export PATH=“$$PATH:/new/path”

后台执行 Shell 脚本

有时候一些脚本执行时间较长,命令行界面会被占用,因此可以采取后台运行脚本:

 ./my_script.sh & 

这种方法在退出 Shell 后,脚本进程会随之终止,为了保证脚本一直运行,可以采用:

 nohup ./my_script.sh &

脚本的的标准输出和标准错误会重定向到 nohup.out 文件里

使用 jobs 命令可以查看后台中运行着的进程。

2 Shell 编程基础

2.1 输入输出、管道

Linux 中的文本流

文本流存在于 Linux 的每一个进程中。Linux 的每个进程启动时,会打开三个文本流的端口:标准输入、标准输出、标准错误。这三个端口对应着一个程序的输入、输出和异常的抛出。

例如:
在 bash 中输入一串字符后,bash 进程中的标准输入端口捕获命令行中的输入,进行处理后从标准输出端口中传出,回显在屏幕上,如果处理过程中发生异常,则会通过标准错误端口,将异常回显在屏幕上。

输出重定向

某些情况下,我们需要保存程序的输出,此时就可以通过重定向,将程序的输出保存到文件中

  1. 将标准输出定向到文件中, 使用这种方式会将程序的标准输出覆盖文件内容:
 ls > dir_log
  1. 将标准输出追加到文件中, 使用这种方式会将程序的标准输出追加至文件的末尾:
 ls >> dir_log
  1. 执行完命令后,可以通过 cat dir_log 查看保存的文件内容

输入重定向

与输出重定向类似,输入重定向是把程序的标准输入进行重新定向。

输入重定向:

  • 格式:command < inputfile
  • 将右边的文件作为标准输入,然后传入左边的命令
  • 例: wc -l < /dev/null

内联输入重定向:

  • 格式: command << maker
  • 输出重定向需要文件,而内联输入重定向可以使用即时输入的文本作为标准输入,传入左边的命令
  • 右边的字符“maker”作为标志,表示标准输入的开始和结束,自身不包含在标准输入里。
  • 下图例中以“maker”作为标志
    在这里插入图片描述

command << maker >file,同时将输入的内容存成文件

管道

有时需要将一个命令的输出连到另一个命令的输入,如果用重定向实现会

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

zhugenmi

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

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

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

打赏作者

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

抵扣说明:

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

余额充值