如何检查选项是否设置为 bash 脚本?

Ach*_*ika 4 shell-script

我正在创建一个基本的 bash 脚本来部署一个简单的 web 应用程序。我当前的代码如下。

#!/bin/bash
clear

echo "********************************************";
echo "Hello, I'm going to deploy the QuizProject";
echo "********************************************";

git pull --all;

#Only need to execute if option is present
composer install;

echo "********************************************";
echo "All the jobs done! Cheers";
echo "********************************************";
Run Code Online (Sandbox Code Playgroud)

目前我正在命令中运行此脚本

bash deploy.sh
Run Code Online (Sandbox Code Playgroud)

但这会执行bash文件中的所有命令。

我想在传递特定命令时执行此操作,然后仅运行“composer install”

bash -composer deploy.sh
Run Code Online (Sandbox Code Playgroud)

Jan*_*nis 5

我理解你的问题,你想控制该功能。也许最好通过选项来完成。这是一种方法:

#!/bin/bash

do_all=1
do_git=0
do_install=0
while getopts "gi" opt
do
    case $opt in
    (g) do_all=0 ; do_git=1 ;;
    (i) do_all=0 ; do_install=1 ;;
    (*) printf "Illegal option '-%s'\n" "$opt" && exit 1 ;;
    esac
done

clear

echo "********************************************";
echo "Hello, I'm going to deploy the QuizProject";
echo "********************************************";

(( do_all || do_git )) && git pull --all;

(( do_all || do_install )) && composer install;

echo "********************************************";
echo "All the jobs done! Cheers";
echo "********************************************";
Run Code Online (Sandbox Code Playgroud)

如果您在不带选项的情况下调用该脚本:

bash deploy.sh
Run Code Online (Sandbox Code Playgroud)

git 和 install 都会被调用。如果您使用 option -i(或 resp. -g)调用它,则只会完成安装(resp. git 调用):

bash deploy.sh -i
bash deploy.sh -g
Run Code Online (Sandbox Code Playgroud)

您还可以通过以下方式之一指定这两个选项来执行这两项操作:

bash deploy.sh -gi
bash deploy.sh -g -i
Run Code Online (Sandbox Code Playgroud)