如何在 Linux 中创建简单的 Shell 脚本
创建 shell 脚本是 Linux 用户必须掌握的最基本技能之一。Shell 脚本在自动执行重复任务方面发挥着重要作用,否则逐行执行这些任务会非常繁琐。
在本教程中,我们重点介绍每个 Linux 用户都应该掌握的一些基本 shell 脚本操作。
1.创建一个简单的 Shell 脚本
shell 脚本是一个由ASCII文本组成的文件。我们将从创建一个简单的 shell 脚本开始,为此,我们将使用文本编辑器。有相当多的文本编辑器,既有命令行的,也有基于 GUI 的。在本指南中,我们将使用vim 编辑器。
我们将首先创建一个简单的脚本,该脚本在执行时显示“ Hello world ”。
$ vim hello.sh
将以下内容粘贴到文件中并保存。
#!/bin/bash # Print Hello world message echo "Hello World!"
让我们逐行检查一下该 shell 脚本。
- 第一行 –
#!/bin/bash
– 称为 shebang 标头。这是一个特殊的构造,指示将使用哪个程序来解释脚本。在本例中,这将是/bin/bash指示的bash shell 。还有其他脚本语言,例如Python(表示为)和Perl(其 shebang 标头表示为)。#!/usr/bin/python3
#!/usr/bin/perl
- 第二行是注释。注释是描述脚本运行时执行和不执行的操作的语句。注释前面始终带有井号
#
。 - 最后一行是在终端上打印“ Hello World ”消息的命令。
下一步是通过使用chmod命令分配执行权限使脚本可执行,如下所示。
$ chmod +x hello.sh
最后,使用以下任一命令运行 shell 脚本:
$ bash hello.sh OR $ ./hello.sh
2.使用条件语句执行代码
与其他编程语言一样, bash 脚本也使用条件语句来做出决策,语法上只有细微的差别。我们将介绍if、if-else和elif条件语句。
仅限 if 语句的示例
if语句可用于测试单个或多个条件。我们将从if语句的基本用法开始,以测试单个条件。if语句由块定义if ... fi
。
if command then statement fi
我们来看看下面的shell脚本。
#!/bin/bash echo 'Enter the score' read x if [[ $x == 70 ]]; then echo 'Good job!' fi
上述 shell 脚本提示用户提供分数,然后将其存储在变量x中。如果分数相当于70,则脚本返回输出“ Good job! ”。比较运算符==
用于测试输入的分数(存储在变量x中)是否等于100。
您可以使用的其他比较运算符包括:
-eq
– 等于-ne
– 不等于-lt
- 少于-le
– 小于或等于-lt
- 少于-ge
– 大于或等于
例如,如果输入分数是小于50 的任何值,下面的if 语句块就会打印出“ Work Harder ”。
if [[ $x -lt 50 ]]; then echo 'Work Harder!' fi
if-else 语句示例
对于有两种可能结果的情况:– 无论是这个还是那个 – if-else 语句就派上用场了。
if command then statement1 else statement2 fi
下面的脚本读取输入分数并检查它是否大于或等于70。
如果分数大于或等于70,您将收到“干得好,您通过了! ”消息。但是,如果分数低于70 ,则会打印输出“您失败了”。
#!/bin/bash echo 'Enter the score' read x if [[ $x -ge 70 ]]; then echo 'Great job, You passed!' else echo 'You failed' fi
if-elif-else 语句的示例
在存在多个条件且结果不同的场景中,使用if-elif-else语句。此语句采用以下格式。
if condition1 then statement1 elif condition2 then statement2 else statement3 fi
例如,我们有一个彩票脚本,用于检查输入的数字是90、60还是30。
#!/bin/bash echo 'Enter the score' read x if [[ $x -eq 90 ]]; then echo “You have won the First Prize” elif [[ $x -eq 60 ]]; then echo “You have won the Second Prize” elif [[ $x -eq 30 ]]; then echo “You have won the Second Prize” else echo “Please try again” fi
3. 使用带有 AND 逻辑的 If 语句
您可以将if语句与AND逻辑运算符一起使用,以便在满足两个条件时执行任务。&&
运算符用于表示AND逻辑。
#!/bin/bash echo 'Please Enter your user_id' read user_id echo 'Please Enter your tag_no' read tag_id if [[ ($user_id == “example” && $tag_id -eq 3990) ]]; then echo “Login successful” else echo “Login failure” fi
5. 使用带有“或”逻辑的 If 语句
当使用符号表示的“或”||
逻辑时,脚本需要满足其中任何一个条件才能产生预期的结果。
#!/bin/bash echo 'Please enter a random number' read number if [[ (number -eq 55 || number -eq 80) ]]; then echo 'Congratulations! You’ve won' else echo 'Sorry, try again' fi
使用循环结构
Bash循环允许用户执行一系列任务,直到达到某个结果。这在执行重复任务时非常有用。在本节中,我们将了解一些在其他编程语言中也会发现的循环。
While 循环
这是最容易使用的循环之一。语法非常简单:
while <some test> do commands done
下面的 while 循环在执行时列出从 1 到 10 的所有数字。
#!/bin/bash # A simple while loop counter=1 while [ $counter -le 10 ] do echo $counter ((counter++)) done
让我们讨论一下 while 循环:
变量counter初始化为1。当变量小于或等于10时,计数器的值将递增,直到满足条件。行echo $counter打印从 1 到 10 的所有数字。
For 循环
与 while循环一样,for 循环用于迭代执行代码。即按照用户定义的次数重复执行代码。
语法是:
for var in 1 2 3 4 5 N do command1 command2 done
下面的for循环迭代从 1 到 10,并在屏幕上处理它们的值。
实现此目的的更好方法是使用双花括号定义一个范围{ }
(如图所示),而不是输入所有数字。
#!/bin/bash # Specify range in a for loop for num in {1..10} do echo $num done
Bash 位置参数
位置参数是一种特殊变量,在脚本中引用该变量,当在 shell 上传递值但无法赋值时。位置参数的范围从$0 $1 $2 $3 …… 到$9。超过$9 的值时,参数必须用花括号括起来,例如${10}、${11} ……等等。
执行脚本时,第一个位置参数$0表示 shell 脚本的名称。$1参数表示传递到终端的第一个变量,$2表示第二个变量,$3表示第三个变量,依此类推。
让我们创建一个脚本test.sh,如下所示。
#!/bin/bash echo "The name of the script is: " $0 echo "My first name is: " $1 echo "My second name is: " $2
接下来,执行脚本并提供名字和姓氏作为参数:
# bash test.sh James Kiarie
从输出中,我们可以看到打印的第一个变量是 shell 脚本的名称,在本例中为test.sh。 此后,将根据 shell 脚本中定义的位置参数打印出名称。
位置参数很有用,因为它们可以帮助您自定义输入的数据,而不是明确地为变量分配值。
Shell 命令退出代码
让我们首先回答一个简单的问题:什么是退出代码?
用户或 shell 脚本在 shell 上执行的每个命令都有退出状态。退出状态是一个整数。
退出状态0表示命令成功执行且没有任何错误。1到 255之间的任何值都表示命令失败或未成功执行。
要查找命令的退出状态,请使用$?
Shell 变量。
退出状态 1 指向一般错误或任何不允许的错误,例如在没有 sudo 权限的情况下编辑文件。
退出状态 2 表示命令或内置 shell 变量使用不正确。
127 退出状态指向非法命令,通常会导致“未找到命令”错误。
处理脚本中的 Shell 命令输出
在 Bash 脚本中,您可以将命令的输出存储在变量中以供将来使用。这也称为 shell 命令替换,可以通过以下方式实现。
variable=$(command) OR variable=$(/path/to/command) OR variable=$(command argument 1 argument 2 ...)
例如,您可以将date命令存储在名为today 的变量中,并调用 shell 脚本来显示当前日期。
#!/bin/bash today=$(date) echo “Today is $today”
让我们再举一个例子。假设您想在 Linux 系统上查找有效的登录用户。您将如何做?首先,所有用户(系统、进程和登录用户)的列表都存储在/etc/passwd文件中。
要查看该文件,您需要使用cat 命令。但是,要缩小到登录用户,请使用grep 命令搜索具有/bin/bash属性的用户,并使用cut -c 1-10命令(如图所示)显示名称的前 10 个字符。
我们将cat 命令存储到login_users变量中。
#!/bin/bash login_users=$(cat /etc/passwd | grep /bin/bash | cut -c 1-10) echo 'This is the list of login users: echo $login_users
至此,我们关于创建简单 shell 脚本的教程就结束了。希望您觉得本教程很有价值。