带有 5 个实际示例的 Bash 脚本介绍教程

举报
Tiamo_T 发表于 2022/02/02 10:42:53 2022/02/02
【摘要】 Shell 是一个解释用户命令的程序。这些命令要么由用户直接输入,要么从名为 shell 脚本的文件中读取。 当Shell直接读取用户的输入时,它被称为交互式Shell。

Shell 是一个解释用户命令的程序。这些命令要么由用户直接输入,要么从名为 shell 脚本的文件中读取。

当Shell直接读取用户的输入时,它被称为交互式Shell。

当从文件中读取命令并执行它时,Shell 被称为非交互式 shell。在这种情况下,shell 从上到下读取脚本文件的每一行,并像用户直接键入一样执行每个命令。

打印内置 shell 变量 $- 的值,以了解 shell 是交互式的还是非交互式的。

# echo $-
himBH

注意:当 shell 是交互式的时,$- 变量包含一个“i”

Unix 有多种 Shell。Bourne shell (sh)、Bourne again shell (bash)、C shell (csh)、Korn shell (ksh)、Tenex C shell (tcsh)。使用 which 或 whereis unix 命令找出特定 shell 的位置,如下所示。

# which bash
/bin/bash

# whereis bash
bash: /bin/bash /usr/share/man/man1/bash.1.gz

您可以通过键入 shell 名称在 shell 之间切换。例如,键入 csh 以切换到 C shell。


shell脚本的编写和执行

示例 1.Hello World Bash 脚本

    1. 通过使用您喜欢的编辑器将以下两行键入文件来创建脚本。
$ cat helloworld.sh
#!/bin/bash
echo Hello World
    1. 您可以为文件选择任何名称。文件名不应与任何 Unix 内置命令相同。
    2. 脚本总是以两个字符 '#!' 开头 这被称为she-bang。这是为了表明该文件是一个脚本,并且应该使用文件中第一行的其余部分指定的解释器(/bin/bash)来执行。
    3. 执行如下所示的脚本。如果您在执行 shell 脚本时遇到任何问题,请参阅shell 脚本执行教程
$ bash helloworld.sh
Hello World
  1. 当您执行命令“bash helloworld.sh”时,它会启动非交互式 shell 并将文件名作为参数传递给它。
  2. 第一行告诉操作系统要生成哪个 shell 来执行脚本。
  3. 在上面的示例中,bash 解释器解释脚本并从上到下一一执行命令。
  4. 您甚至可以执行脚本,而无需通过以下方式引导“bash”:
    • 使用命令“chmod u+x helloworld.sh”更改脚本的权限以允许您(用户)执行它。
    • 包含脚本的目录应包含在 PATH 环境变量中。如果不包含,可以通过指定脚本的绝对路径来执行脚本。
  5. echo 是一个命令,它简单地输出我们给它的参数。它还用于打印变量的值。

Bash 启动文件

当 bash 作为交互式 shell 调用时,它首先从 /etc/profile 读取并执行命令。如果 /etc/profile 不存在,它会按照给定的顺序从 ~/.bash_profile、~/.bash_login 和 ~/.profile 读取并执行命令。启动 shell 时可以使用 –noprofile 选项来禁止此行为。

通常你的 bash_profile 执行 ~/.bashrc。如果您愿意,可以显示欢迎信息。这仅在您第一次登录时运行。您可以导出任何您想要的变量,并且您可以设置打开 shell 后将运行和可用的别名。当登录 shell 退出时,Bash 从文件 ~/.bash_logout 读取并执行命令。

示例 2. 登录时打印欢迎消息

在 bash_profile 文件中键入以下内容。如果该文件不存在,请创建一个包含以下内容的文件。

$ cat ~/.bash_profile
hname=`hostname`
echo "Welcome on $hname."

当您登录到交互式 shell 时,您将看到如下所示的欢迎消息。

login as: root
root@dev-db's password:
Welcome on dev-db

示例 3. 打印系统相关信息

当您登录到交互式 shell 时,您可以显示安装在服务器中的内核的名称、bash 版本、正常运行时间和服务器中的时间。

$cat ~/.bash_profile
hname=`hostname`
echo "Welcome on $hname."

echo -e "Kernel Details: " `uname -smr`
echo -e "`bash --version`"
echo -ne "Uptime: "; uptime
echo -ne "Server time : "; date

当您启动交互式 shell 时,它会打印如下所示的消息。

login as: root
root@dev-db's password:
Welcome on dev-db

Kernel Information:  Linux 2.6.18-128 x86_64
GNU bash, version 3.2.25(1)-release (x86_64-redhat-linux-gnu)
Copyright (C) 2005 Free Software Foundation, Inc.
Uptime:  11:24:01 up 21 days, 13:15,  3 users,  load average: 0.08, 0.18, 0.11
Server time : Tue Feb 22 11:24:01 CET 2010

示例 4. 打印上次登录详细信息

如果多个用户以相同的登录名使用同一台机器,那么最后一次登录的机器以及他们登录的时间等详细信息将是最有用的详细信息。此示例在交互式 shell 启动期间打印最后登录详细信息。

$ cat ~/.bash_profile
hname=`hostname`
echo "Welcome on $hname."
echo -e "Kernel Details: " `uname -smr`
echo -e "`bash --version`"
echo -ne "Uptime: "; uptime
echo -ne "Server time : "; date

最后日志 | grep "根" | awk {'print "上次登录时间:"$3

print "Last Login Date & Time: ",$4,$5,$6,$7,$8,$9;}'
在启动过程中,您将收到如下所示的消息。

login as: root
root@dev-db's password:
Welcome on dev-db
Kernel Information:  Linux 2.6.18-128 x86_64
GNU bash, version 3.2.25(1)-release (x86_64-redhat-linux-gnu)
Copyright (C) 2005 Free Software Foundation, Inc.
Uptime:  11:24:01 up 21 days, 13:15,  3 users,  load average: 0.08, 0.18, 0.11
Server time : Tue Feb 22 11:24:01 CET 2010

上次登录: sasikala-laptop

最后登录日期和时间:2010 年 2 月 22 日星期二 11:24:01 +0100

示例 5. 启动期间导出变量并设置别名

您将在 .bashrc 和 .bash_profile 文件中使用的最常用命令是 export 和 alias 命令。

别名只是用一段文本替换另一段文本。当您运行别名时,它只是将您键入的内容替换为别名所对应的内容。例如,如果要为 ls 命令设置别名以列出具有颜色的文件/文件夹,请执行以下操作:

alias ls 'ls --color=tty'

如果将此命令添加到启动文件之一,则可以执行 ls 命令,该命令将自动替换为 ls –color=tty 命令。

导出命令用于设置环境变量。系统或其他应用程序使用各种环境变量。它们只是一种设置任何应用程序/脚本都可以读取的参数的方法。如果您在没有导出命令的情况下设置变量,则该变量仅针对该特定进程存在。

在下面的示例中,它正在导出环境变量 HISTSIZE。以# 开头的行是注释行。

$ cat /etc/profile
alias ls 'ls --color=tty'

# Setup some environment variables.
export HISTSIZE=1000

PATH=$PATH:$HOME/bin:/usr/bin:/bin/usr:/sbin/etc

export PATH

export SVN_SH=${SVN_RSH-ssh}
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。