Shell脚本编程 - 02_Shell脚本的整体框架与构造

提示:​本文仅供参考


文章目录


前言

        脚本(script)就是包含一系列命令的一个文本文件,例如:Windows中的 .bat 批处理脚本 以及 Linux中的 .sh 脚本文件。

        Shell 读取这个文件,依次执行里面的所有命令,就好像这些命令直接输入到命令行一样。所有能够在命令行完成的任务,都能够用脚本完成。


一、Shell是什么?

        Shell 的原意是“外壳”,跟 kernel(内核)相对应,比喻内核外面的一层,即用户跟内核交互的对话界面。

        Shell 是一个程序,提供一个与用户对话的环境。这个环境只有一个命令提示符,让用户从键盘输入命令。Shell 接收到用户输入的命令,将命令送入操作系统执行,并将结果返回给用户。本书中,除非特别指明,Shell 指的就是命令行环境。

        Shell 是一个命令解释器,解释用户输入的命令。它支持变量、条件判断、循环操作等语法,用户可以通过 Shell 命令写出各种小程序,又称为脚本(script)。这些脚本都通过         Shell 的解释执行,而不通过编译。

        Shell 是一个工具箱,提供了各种小工具,供用户方便地使用操作系统的功能。

二、Bash与Shell的关系

        Bash 是目前最常用的一款 Shell 解释器,Shell脚本中的首行,一般标志着选用何种解释器解释该Shell脚本,最常用的就是Shell解释器,即:#!/bin/bash

2.1 Shebang

        出现在文本文件第一行前两个字符#! 就是 Shebang,程序会分析Shebang后面的内容,作为解释器的指令,例如:

  • 以#!/bin/sh开头的文件,程序在执行的时候会调用/bin/sh,也就是bash解释器
  • 以#!/usr/bin/python开头的文件,代表指定python解释器去执行
  • 以#!/usr/bin/env开头的解释都名称,是一种在不同平台上都能正确找到解释器的办法
  • 如果脚本未指定Shebang,脚本执行的时候,默认用当前shell去解释脚本
  • 如果shebang指定了可执行的解释器,如/bin/bash/usr/bin/python,脚本在执行时,文件名会作为参数传递给解释器
  • 如果#!指定的解释程序没有可执行权限,则会报错"bad interpreter: Permission denied"
  • 如果#!指定的解释程序不是一个可执行文件,那么指定的解释释程序会被忽略,转而交给当前的SHELL去执行这个脚本。
  • 如果#!指定的解释程序不存在,那么会报错"bad interpreterr: No such file or directory"。
  • #!之后的解释程序,需要写其绝对路径(如:#!/bin/bash),它是不会自动到SPATH中寻找解释器的。
  • 如果你使用"bashtest.sh"这样的命令来执行脚本,那么#!这一行将会被忽略掉,解释器当然是用命令行中显式指定的bash。

示例:一个简单的 Bash 脚本示例,打印当前日期和时间:

#!/bin/bash
echo "当前日期和时间:"
date

此外,可以通过以下命令查看当前 Linux 系统所安装的所有 Shell 以及 当前运行的 Shell:

#查看当前 Linux 系统所安装的所有 Shell
$ cat /etc/shells
#查看当前运行的 Shell
$ echo $SHELL
/bin/bash #运行结果
#用户可以通过bash命令的--version参数或者环境变量$BASH_VERSION,查看本机的 Bash 版本
$ bash --version
GNU bash,版本 5.0.3(1)-release (x86_64-pc-linux-gnu) #运行结果
#OR
$ echo $BASH_VERSION
5.0.3(1)-release  #运行结果

2.1 Bash 的基本语法

2.1.1 命令格式

命令行环境中,主要通过使用 Shell 命令,进行各种操作:

# Shell 命令基本都是下面的格式:
$ command [ arg1 ... [ argN ]]
# command是具体的命令或者可执行文件,arg1 ... argN是传递给命令的参数,可选。

$ ls -l
#ls是命令,-l是参数。

#有些参数是命令的配置项,这些配置项一般都以一个连词线开头,比如上面的-l。同一个配置项往往有长和短两种形式,比如-l是短形式,--list是长形式,它们的作用完全相同。短形式便于手动输入,长形式一般用在脚本之中,可读性更好,利于解释自身的含义。
# 短形式
$ ls -r
# 长形式
$ ls --reverse

2.1.反斜杠 \

#Bash 单个命令一般都是一行,用户按下回车键,就开始执行。有些命令比较长,写成多行会有利于阅读和编辑,这时可以在每一行的结尾加上反斜杠,Bash 就会将下一行跟当前行放在一起解释
$ echo cmdcmd
# 等同于
$ echo cmd\
  cmd

2.1.空格-Space键( Tab 键)

# Bash 使用空格(或 Tab 键)区分不同的参数。

$ command foo bar
# foo和bar之间有一个空格,所以 Bash 认为它们是两个参数。如果参数之间有多个空格,Bash 会自动忽略多余的空格。

$ echo this is a     test
this is a test  #运行结果

2.1.分号 ;

#分号(;)是命令的结束符,使得一行可以放置多个命令,上一个命令执行结束后,再执行第二个命令。
$ clear; ls
#使用分号时,第二个命令总是接着第一个命令执行,不管第一个命令执行成功或失败

2.1.命令组合符:&&、||

#如果Command1命令运行成功,则继续运行Command2命令
$ Command1 && Command2
#如果Command1命令运行失败,则继续运行Command2命令
$ Command1 || Command2

$ cat filelist.txt ; ls -l filelist.txt
#只要cat命令执行结束,不管成功或失败,都会继续执行ls命令。

$ cat filelist.txt && ls -l filelist.txt
#只有cat命令执行成功,才会继续执行ls命令。如果cat执行失败(比如不存在文件flielist.txt),ls命令就不会执行。

$ mkdir foo || mkdir bar
#只有mkdir foo命令执行失败(比如foo目录已经存在),才会继续执行mkdir bar命令。如果mkdir foo命令执行成功,就不会创建bar目录了。

2.1.6 echo 命令

#echo命令的作用是在屏幕输出一行文本
$ echo hello world
hello world #运行结果
#如果想要输出多行文本,需要把多行文本放在引号内

# echo -n (-n参数)
#默认情况下,echo输出的文本末尾会有一个回车符。-n参数可以取消末尾的回车符。-n参数可以让两个echo命令的输出连在一起,出现在同一行。

# echo -e (-e参数)
#-e参数会解释引号(双引号和单引号)里面的特殊字符(比如换行符\n)。如果不使用-e参数,即默认情况下,引号会让特殊字符变成普通字符,echo不解释它们,原样输出。
$ echo "Hello\nWorld"
Hello\nWorld#运行结果
$ echo -e "Hello\nWorld"
Hello#运行结果
World#运行结果

2.1.7 type 命令

# type命令用来判断命令的来源。
$ type echo
echo is a shell builtin #运行结果
$ type ls
ls is hashed (/bin/ls) #运行结果
# type命令告诉我们,echo是内部命令,ls是外部程序(/bin/ls)。


#type命令本身也是内置命令。
$ type type
type is a shell builtin #运行结果


# type命令的-a参数,查看一个命令的所有定义
$ type -a echo
echo is shell builtin #运行结果
echo is /usr/bin/echo #运行结果
echo is /bin/echo #运行结果
# echo命令即是内置命令,也有对应的外部程序。


#type命令的-t参数,可以返回一个命令的类型:别名(alias),关键词(keyword),函数(function),内置命令(builtin)和文件(file)。

$ type -t bash
file #运行结果
$ type -t if
keyword #运行结果
#bash是文件,if是关键词。

2.1.快捷键

  • Ctrl + L:清除屏幕并将当前行移到页面顶部。

  • Ctrl + C:中止当前正在执行的命令。

  • Shift + PageUp:向上滚动。

  • Shift + PageDown:向下滚动。

  • Ctrl + U:从光标位置删除到行首。

  • Ctrl + K:从光标位置删除到行尾。

  • Ctrl + D:关闭 Shell 会话。

  • :浏览已执行命令的历史记录。

  • 除了上面的快捷键,Bash 还具有自动补全功能。


总结

以上内容介绍了Shell脚本编程的基础知识,而Bash 是目前最常用的 Shell。

个人学习笔记,仅供个人学习参考。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值