📌  相关文章
📜  如何在 Linux 中创建一个 Shell 脚本

📅  最后修改于: 2022-05-13 01:56:13.573000             🧑  作者: Mango

如何在 Linux 中创建一个 Shell 脚本

Shell 是操作系统的一个接口。它接受来自用户的命令并将它们解释给操作系统。如果你想同时运行一堆命令,你可以通过创建一个 shell 脚本来实现。如果您需要定期执行任务(例如备份),Shell 脚本非常有用。您可以列出这些命令并只用一个脚本来执行它们。让我们看看如何创建一个 shell 脚本并在 Linux 上运行它。

创建外壳脚本

登录到您的 Linux 机器并打开终端,导航到要存储 shell 脚本的文件夹。 Shell 脚本以扩展名“.sh”结尾。让我们创建我们的第一个 shell 脚本。输入

touch script.sh

现在,这个脚本文件默认是不可执行的,我们必须赋予这个文件可执行权限。输入

chmod +x script.sh

现在,我们将向这个 shell 脚本添加一些命令。使用您选择的任何文本编辑器(基于命令行或基于 GUI)打开此 shell 脚本并添加一些命令。我们将使用纳米。输入

nano script.sh

添加以下命令来测试这个 shell 脚本

echo This is my first shell script
touch testfile
ls
echo End of my shell script

保存更改,并通过键入运行 shell 脚本

./script.sh

以上步骤截图

可以看到,它执行了所有指定的命令。

shell 脚本中的注释

在 shell 脚本中任何以“#”开头的行都被视为注释,并在执行期间被 shell 忽略,除了 shebang 行,我们将在本文后面看到。让我们看一个例子。使用以下内容创建一个 shell 脚本。

# This is a comment
echo Testing comments in shell script

Shell 脚本中的注释

你可以看到,评论被忽略了。

Shell 脚本中的变量

是的,Shell 脚本支持变量的使用,我们不需要在声明时定义变量的类型。有两种类型的变量:

  • 系统定义的变量
  • 用户定义的变量。

系统定义的变量,也称为环境变量,通常是大写的。您可以使用 printenv 命令查看所有当前环境变量。用户定义变量由用户设置,仅在脚本执行期间存在。您可以通过简单地键入变量名称并使用 = 符号赋值来定义变量,并通过在变量名称前添加 $ 来访问变量。以下示例脚本中演示了变量。

# Accessing an Environment Variable
echo $USER

# Creating and accessing User defined Variable
variable_name="Geeksforgeeks"
echo $variable_name

Shell 脚本中的变量

定义 Shell 脚本解释器

Linux 中有许多可用的 Shell,例如 The bourne Shell(sh)、The Korn Shell(ksh) 和 GNU Bourne-Again Shell(bash)。为 sh shell 编写的脚本称为 shell 脚本,它们可以被 ksh 和 bash shell 解释。 ksh 和 Bash 是原始 sh shell 的改进版本,它们具有比 sh 更多的功能。 Bash 通常是大多数 Linux 发行版中的默认 shell,专门为 bash shell 编写的脚本称为 bash 脚本。

您可以指定脚本将使用哪个 shell,即使脚本是从另一个 shell 终端执行的。为此,请添加“#!”在脚本文件的顶部,然后是所选 shell 的绝对路径。要将 bash 指定为解释器,请在 shell 脚本顶部添加以下行。

#!/bin/bash

这条线称为shebang线。

注意:这仅在您的系统上安装了 bash 时才有效。

比较运算符

您可以在 shell 脚本中比较两个变量。我们通过这些比较来做出决定,我们将在本文后面看到如何做到这一点,但在此之前,这里是一些运算符的列表。

整数比较

OperatorDescription
-eqis equal to
-neis not equal to
-gtis greater than
-geis greater than or equal to
-ltis less than
-leis less than or equal to

字符串比较

OperatorDescription
==is equal to
!=is not equal to
\<is less than, in ASCII alphabetical order
\>is greater than, in ASCII alphabetical order

我们在 < 和 > 之前添加一个 \,因为在 [ ] 构造中键入它们时需要对其进行转义。现在,让我们看看这些在哪里使用。

条件语句

条件语句仅在满足某些条件时才用于执行代码块。 Shell 脚本支持使用条件语句。我们使用运算符来检查条件。让我们看几个条件语句。

如果语句

它检查条件,如果条件为真,则执行命令。

句法

if [ condition ]
then
#statements
fi

让我们看一个例子。

#!/bin/sh
x=10
y=11
if [ $x -ne $y ] 
then
echo "Not equal"
fi

.if 语句

if-else 语句

在 if-else 语句中,您可以指定一组在不满足条件时运行的命令。

句法

if [ condition ]
then
#set of statements if the condition is true
else
#set of statements if the condition is false
fi

让我们看一个例子

#!/Syntaxbin/sh
x=10
y=10
if [ $x -ne $y ] 
then
echo "Not equal"
else
echo "They are equal"
fi

.if-else 语句

还有其他条件语句,你可以在这里阅读它们。

注意:在指定要检查的条件时,在 [ 和 ] 之前输入一个空格,否则会出错。

循环

使用循环,您可以一遍又一遍地执行一组命令,直到满足某个条件。让我们看看一些循环。

While 循环

如果条件为真,它开始运行指定的命令并重复它们直到条件为假。

句法

while [ condition ]
do
#set of statements
done

让我们看一个例子。

#!/bin/sh
x=2
while [ $x -lt 6 ]
do
echo $x
x=`expr $x + 1`
done

While 循环

在将 expr 语句分配给变量时,我们将它包含在 ` 中。您可以在此处阅读有关 expr 命令的信息。

循环

在 for 循环中,变量迭代值列表并在没有更多值迭代时结束。

句法

for var in val1 val2 val3
do
#statements
done

让我们看一个例子。

#!/bin/sh
for var in 2 4 5 8
do
echo $var
done

for 循环

您可以在此处详细了解循环。

位置参数

位置参数是我们在执行脚本时传递给 shell 脚本的参数或值。它们由变量 $0、$1、$2 ... $9 访问。除此之外,它们还被 ${10}、${11} 等引用。 $# 存储传递参数的数量,$0 存储脚本的名称。让我们看一个例子来理解这一切。

#!/bin/sh
echo "No of arguments is $#"
echo "Name of the script is $0"
echo "First argument is $1"
echo "Second argument is $2"

要传递参数,只需在脚本名称后的终端中键入它们,如下所示。

位置参数

存储命令的输出

您可以将命令的输出存储在 shell 脚本中的变量中。有两种方法可以做到这一点。

句法

#Syntax 1
var=$(a valid linux command)
#Syntax 2
var2=`a valid linux command`

让我们看一个例子。

#!/bin/sh
b=$(pwd)
c=`pwd`
echo $b
echo $c
d=$(ls /bin | grep bash)
echo $d

存储命令的输出

shell 命令的退出代码

每当命令结束并将控制权返回给父进程时,它都会返回 0 到 255 之间的退出代码。退出代码 0 表示命令成功,任何其他退出代码表示命令不成功。您可以通过访问 #? 来查看运行任何命令后的退出代码?多变的。请参见下面的示例。

shell命令的退出代码

您可以为您的 shell 脚本手动设置退出代码。这可以与条件语句一起使用,以传达脚本的目的是否已实现。

例子

#!/bin/sh
read x
if [ $x -ne 10 ]
then
echo failed
exit 1
else
echo passed
exit 0
fi

shell命令的退出代码