Linux0基础入门:初识shell脚本编程

本文介绍了Linux shell脚本编程的基础知识,包括如何使用多个命令、创建脚本文件、显示消息、使用变量、重定向输入和输出,以及执行数学运算。通过实例展示了如何创建、运行和管理shell脚本,强调了在脚本中使用变量、重定向和管道的重要性,帮助初学者理解shell脚本的基本概念和操作。
摘要由CSDN通过智能技术生成

bdb0e9d3731c91891ab23b90491bf7e3.jpeg

初识脚本编程

到目前为止我们已经知道了 Linux 系统和命令行的基础知识,是时候开始编程了。本章讨论编写 shell 脚本的基础知识。在开始编写自己的 shell 脚本大作前,你必须了解这些基本概念。

使用多个命令

到目前为止,你已经了解了如何使用 shell 的命令行界面提示符来输入命令和查看命令的结果。shell 脚本的关键在于输入多个命令并处理每个命令的结果,甚至需要将一个命令的结果传给另一个命令。shell 可以让你将多个命令串起来,一次执行完成。如果要两个命令一起运行,可以把它们放在同一行中,彼此间用分号隔开。

$ date ; who Sun Dec 20 08:59:29 AM CST 2020 testuser tty1 2020-12-20 08:11 (:0) testuser pts/0 2020-12-20 08:11 (:0) testuser pts/1 2020-12-20 08:59 (:0) $

恭喜,你刚刚已经写好了一个脚本。这个简单的脚本只用到了两个 bash shell 命令。date 命令先运行,显示了当前日期和时间,后面紧跟着 who 命令的输出,显示当前是谁登录到了系统上。使用这种办法就能将任意多个命令串连在一起使用了,只要不超过最大命令行字符数 255 就行。

这种技术对于小型脚本尚可,但它有一个很大的缺陷:每次运行之前,你都必须在命令提示符下输入整个命令。可以将这些命令组合成一个简单的文本文件,这样就不需要在命令行中手动输入了。在需要运行这些命令时,只用运行这个文本文件就行了。

创建 shell 脚本文件

要将 shell 命令放到文本文件中,首先需要用文本编辑器来创建一个文件,然后将命令输入到文件中。在创建 shell 脚本文件时,必须在文件的第一行指定要使用的 shell。其格式为:

#!/bin/bash

在通常的 shell 脚本中,井号(#)用作注释行。shell 并不会处理 shell 脚本中的注释行。然而,shell 脚本文件的第一行是个例外,#后面的惊叹号会告诉 shell 用哪个 shell 来运行脚本(是的,你可以使用 bash shell,同时还可以使用另一个 shell 来运行你的脚本)。

在指定了 shell 之后,就可以在文件的每一行中输入命令,然后加一个回车符。之前提到过,注释可用#添加。例如:

# This script displays the date and who's logged on date who

这就是脚本的所有内容了。可以根据需要,使用分号将两个命令放在一行上,但在 shell 脚本中,你可以在独立的行中书写命令。shell 会按根据命令在文件中出现的顺序进行处理。

还有,要注意另有一行也以#开头,并添加了一个注释。shell 不会解释以#开头的行(除了以#!开头的第一行)。留下注释来说明脚本做了什么,这种方法非常好。当两年后回过来再看这个脚本时,你还可以很容易回忆起做过什么。

将这个脚本保存在名为 test1 的文件中,基本就好了。在运行新脚本前,还要做其他一些事。现在运行脚本,结果可能会叫你有点失望。

$ test1 bash: test1: command not found

你要跨过的第一个障碍是让 bash shell 能找到你的脚本文件。如之前所述,shell 会通过 PATH 环境变量来查找命令。快速查看一下 PATH 环境变量就可以弄清问题所在。

$ echo $PATH /usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/bin:/usr/bin :/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/user/bin

PATH 环境变量被设置成只在一组目录中查找命令。要让 shell 找到 test1 脚本,只需采取以下两种作法之一:

  • 将 shell 脚本文件所处的目录添加到 PATH 环境变量中;
  • 在提示符中用绝对或相对文件路径来引用 shell 脚本文件。
有些 Linux 发行版将$HOME/bin 目录添加进了 PATH 环境变量。它在每个用户的 HOME 目录下提供了一个存放文件的地方,shell 可以在那里查找要执行的命令。

在这个例子中,我们将用第二种方式将脚本文件的确切位置告诉 shell。记住,为了引用当前目录下的文件,可以在 shell 中使用单点操作符。

$ ./test1 bash: ./test1: Permission denied

现在 shell 找到了脚本文件,但还有一个问题。shell 指明了你还没有执行文件的权限。快速查看一下文件权限就能找到问题所在。

$ ls -l test1 -rw-rw-r-- 1 user user 73 Sep 24 19:56 test1

在创建 test1 文件时,umask 的值决定了新文件的默认权限设置。由于 umask 变量在 ArchLinux 中被设成了 022,所以系统创建的文件的文件属主只有读/写权限。

下一步是通过 chmod 命令赋予文件属主执行文件的权限。

$ chmod u+x test1 $ ./test1 Sun Dec 20 08:59:29 AM CST 2020 testuser tty1 2020-12-20 08:11 (:0) testuser pts/0 2020-12-20 08:11 (:0) testuser pts/1 2020-12-20 08:59 (:0)

成功了!

显示消息

大多数 shell 命令都会产生自己的输出,这些输出会显示在脚本所运行的控制台显示器上。很多时候,你可能想要添加自己的文本消息来告诉脚本用户脚本正在做什么。可以通过 echo 命令来实现这一点。如果在 echo 命令后面加上了一个字符串,该命令就能显示出这个文本字符串。

$ echo This is a test This is a test

注意,默认情况下,不需要使用引号将要显示的文本字符串划定出来。但有时在字符串中出现引号的话就比较麻烦了。

$ echo Let's see if this'll work Lets see if thisll work

echo 命令可用单引号或双引号来划定文本字符串。如果在字符串中用到了它们,你需要在文本中使用其中一种引号,而用另外一种来将字符串划定起来。

$ echo "This is a test to see if you'
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值