Linux shell编程之(什么是shell(shell脚本介绍及其操作))

上一章Unix和Linux教程请查看:Unix和Linux信号捕获处理介绍和操作
本章我们介绍linux shell的基本概念、shell脚本介绍及其相关操作。
shell脚本是一种计算机程序,设计为由Unix/Linux shell运行,可以是下列之一:

  • Bourne Shell
  • C Shell
  • Korn Shell
  • GNU Bourne-Again Shell
shell是命令行解释器,由shell脚本执行的典型操作包括文件操作、程序执行和打印文本。
1、什么是shell?Shell为你提供了Unix系统的接口,它从你那里收集输入,并根据输入执行程序。
当程序完成执行时它显示程序的输出,shell是一个我们可以运行命令、程序和Shell脚本的环境。
shell有不同的风格,就像操作系统有不同的风格一样,每种shell都有自己的一组可识别的命令和函数。
2、shell命令提示符命令提示符$由shell执行,当提示显示时,你可以输入一个命令。
Shell将在你按下Enter后读取你的输入,它通过查看输入的第一个单词来确定要执行的命令。一个单词是一组完整的字符,空格和制表符分隔单词。
下面是date命令的一个简单示例,它显示当前的日期和时间:
~/shell$ date 2020年 10月 25日 星期一 12:15:05 CST

你可以使用环境教程中介绍的环境变量PS1自定义命令提示符。
3、shell类型在Unix中有两种主要的shell类型
  • Bourne shell——如果你使用的是Bourne类型的shell, $字符是默认的提示符。
  • C shell——如果使用C类型的shell, %字符是默认的提示符。
Bourne shell有以下几个范畴:
  • Bourne shell (sh)
  • Korn shell (ksh)
  • Bourne Again shell (bash)
  • POSIX shell (sh)
下面是不同的c型shell:
(1)C shell (csh)
(2)TENEX/TOPS C shell (tcsh)
最初的Unix shell是在20世纪70年代中期由Stephen R. Bourne编写的,当时他还在新泽西州的AT& T贝尔实验室。
Bourne shell是第一个出现在Unix系统上的shell,因此它被称为“shell”。在大多数Unix版本中,Bourne shell通常安装为/bin/sh,由于这个原因它是编写可以在不同版本的Unix上使用的脚本的首选shell,这一章我们将讨论大部分的shell的概念都是基于Bourne shell。
4、Shell脚本shell脚本的基本概念是命令列表,这些命令按执行顺序列出。一个好的shell脚本应该有注释(前面是#符号)、描述步骤、有条件测试,例如值A大于值B,另外还有循环允许我们遍历大量数据、文件读取和存储数据、变量读取和存储数据、脚本可能包含函数。
我们将在下一节中编写许多脚本,它是一个简单的文本文件,我们在其中放置所有命令和其他几个必需的构造,这些构造告诉shell环境做什么以及何时做。Shell脚本和函数都是解释性的,这意味着它们没有被编译。
5、shell示例脚本假设我们创建了一个test.sh脚本,注意所有脚本都有.sh扩展名。在你向脚本添加任何其他内容之前,你需要提醒系统一个shell脚本正在启动,这是使用shebang构造完成的,例如?# ! / bin / sh这告诉系统接下来的命令将由Bourne shell执行。
它被称为shebang,因为#符号被称为hash散列,而!这个符号叫做“bang”。要创建包含这些命令的脚本,请先放置shebang行,然后添加命令:
#!/bin/bash pwd ls -a

6、shell注释你可以把你的注释写在你的脚本中如下:
#!/bin/bash# Author : Once # Copyright (c) srcmini.com # Script for test: pwd ls -a

保存上述内容并使脚本可执行:
$chmod +x test.sh

【Linux shell编程之(什么是shell(shell脚本介绍及其操作))】shell脚本现在可以执行了:
$./test.sh || sh test.sh

7、扩展Shell脚本Shell脚本有几个必需的构造,它们告诉Shell环境做什么以及什么时候做,当然大多数脚本比上面的脚本更复杂。
毕竟shell是一种真正的编程语言,包含了变量、控制结构等等。无论脚本变得多么复杂,它仍然只是一个按顺序执行的命令列表。
下面的脚本使用read命令,该命令从键盘获取输入,并将其赋给变量name的值,最后在STDOUT上打印它。
echo "输入你的名字:" read name echo "Hola, $name"

下面是两种运行方式,前一种需要保证当前用户对sample.sh有执行权限:
~/shell$ vim sample.sh ~/shell$ ls -la sample.sh -rwxrwxr-x 1 user user 58 11月 25 12:05 sample.sh ~/shell$ ./sample.sh 输入你的名字: java Hola, java ~/shell$ sh sample.sh 输入你的名字: python Hola, python ~/shell$

    推荐阅读