如何在VPS上编写简单的Shell脚本(第3部分)
介绍
条件语句对于任何有用的脚本和功能齐全的编程语言都是必不可少的。 在我们的 Shell 脚本教程的第三部分,您将了解 bash 的所有“if”和“else”,以及如何利用它们来发挥自己的优势。 这篇文章也是假设你已经根据第一篇教程配置了你的shell脚本文件夹。
“如果”命令
如果条件为 true 或 false,则条件语句用于执行某些操作。 对于 shell 脚本,这是由“if”命令执行的。 它后面是一个将被测试的表达式。 这个表达式也可以是一个命令执行的退出代码,一个数学表达式,除了其他各种各样的东西。 使用退出代码时,该命令非常简单:
if ls folder then echo "Folder exists" fi
如果文件夹存在,则 echo 命令将运行,因为 ls 将返回退出代码 0,如成功。 否则,如果文件夹不存在,则不会显示文本。 所有“if”语句都需要跟在“then”命令之后,并以“fi”结束。 如果您不使用退出代码,并且想要测试数学表达式,例如,您将需要“测试”命令。 shell脚本中有以下运算符来比较数字:
-eq or Is equal to -ne or Is not equal to -lt or Is less than -le or Is less than or equal to -gt or Is greater than -ge or Is greater than or equal to
测试命令可以用两种方式编写:
if test 4 -gt 3 or if [ 4 -gt 3]
两者执行完全相同,并且还需要“then”和“fi”。 例子:
if [ 20 -lt 10 ] then echo "What?" fi
“什么?” 永远不会显示,因为 20 大于 10。 现在,如果您想向用户显示一条消息,以防 if 语句返回 false 怎么办?
“其他”命令
“Else”,顾名思义,为 if 命令添加了一条替代路径。 这是非常基本的:
if [ 20 -lt 10 ] then echo "What?" else echo "No, 20 is greater than 10." fi
除了数学表达式,您还可以将字符串与 if/else 进行比较。 它们需要一些不同的语法,但仍然使用测试或“[]”命令。 这是语法:
string = string or string equals string string != string or string does not equal string string or string is not null or not defined -n string or string is not null and exists -z string or string is null and exists
还有一种方法可以了解文件属性:
-s file tests for a file that is not empty -f file tests if the file exists and is not a folder -d folder tests if it's a folder and not a file -w file tests if the file is writable -r file tests if the file is read-only -x file tests if the file is executable
嵌套的“如果”
您还可以将整个“if”语句放在其他语句中,从而创建所谓的“嵌套 if”。 在以下示例中,我们 ' 将借助 read 提供的用户输入来学习这一点,我们在 上一个教程 中学到了这一点:
#!/bin/bash echo "Input which file you want created" read file if [ -f $file ] then echo "The file already exists" else touch $file if [ -w $file ] then echo "The file was created and is writable" else echo "The file was created but isn't writable" fi fi
示例脚本
在这个例子中,我们将继续尝试用我们所学到的东西来改进我们的文件备份脚本。 此版本包括测试备份文件夹以查看它是否存在,或者如果它不存在,它是否有权创建它。 首先,像往常一样,创建脚本:
touch ~/bin/filebackup3 chmod +x ~/bin/filebackup3 nano ~/bin/filebackup3
并继续编辑它:
#!/bin/bash #Backup script 3.0 #Description: makes a copy of any given file at the backup folder #Author: Your Name #Date: 9/29/2013 #Request the backup folder from the user: echo -e "\e[47m\e[1m\e[32mFile Backup Utility\n\e[39m\e[0m\e[47mPlease input your backup folder:" read BACKUPFOLDER #The script will make sure the folder exists if [ -d $BACKUPFOLDER ] then echo "You backup folder exists and will be used." else mkdir $BACKUPFOLDER if [ -d $BACKUPFOLDER ] then echo "Backup folder created successfully." else echo -e "I do not have the rights to create your backup folder.\nThis script will now exit." exit 1 #exit 1 is a command that exits the script with an error code fi fi #Request files to be backed up: echo -e "\e[30mWhich files do you want backed up?\e[39m\e[49m" read FILES if [ -n $FILES ] then cp -a $FILES $BACKUPFOLDER else echo "File does not exist." fi
该脚本会告诉您您输入的备份文件夹何时不存在、何时创建、何时无法创建以及何时在要求文件时指定空字符串。
结论
您学得越多,您可以创建的程序就越好,并有更广泛的可能性来制定新的和创新的解决方案。 在本教程中,我们已经对用户友好的脚本变得更加友好。