如何在VPS上编写简单的Shell脚本(第3部分)

来自菜鸟教程
跳转至:导航、​搜索

介绍

条件语句对于任何有用的脚本和功能齐全的编程语言都是必不可少的。 在我们的 Shell 脚本教程的第三部分,您将了解 bash 的所有“if”和“else”,以及如何利用它们来发挥自己的优势。 这篇文章也是假设你已经根据第一篇教程配置了你的shell脚本文件夹。

“如果”命令

如果条件为 truefalse,则条件语句用于执行某些操作。 对于 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

该脚本会告诉您您输入的备份文件夹何时不存在、何时创建、何时无法创建以及何时在要求文件时指定空字符串。

结论

您学得越多,您可以创建的程序就越好,并有更广泛的可能性来制定新的和创新的解决方案。 在本教程中,我们已经对用户友好的脚本变得更加友好。