命令在终端中运行,但不在Bash脚本中运行

时间:2018-07-15 06:58:06

标签: arrays bash shell

我是sysadmin,负责使用cpanel托管面板部署的几个Web服务器。我正在尝试完成一个备份脚本。 Cpanel捆绑了两个命令,这些命令将在此脚本中使用。这些命令是;

1. whmapi1 modifyacct user=USERNAME BACKUP=[01]
  

此命令具有设置的布尔值,它的作用是启用或   禁用特定用户的备份。

2. /usr/local/cpanel/bin/backup --force
  

为一个或多个用户启用备份后,此命令将启动   服务器上的备份过程。

这是我的脚本逻辑和脚本。

#!/bin/bash

数组

L=($( comm -23 <(du -h --max-depth=1 /home 2>/dev/null | grep G |  awk -F"/" '{print $NF}' | sort | egrep -vw '(home|virtfs)') <(ls -al /var/cpanel/suspended/ | grep -v 'lock' | sort) ))
  

Above Array包含其主目录具有的所有帐户   超过了1GB的限制。

S=($(comm -23 <(du -h --max-depth=1 /home 2>/dev/null | egrep -v '(!G|.cp|cP|clamav)' | awk -F"/" '{print $NF}' | sort | egrep -vw '(home|virtfs)') <(ls -al /var/cpanel/suspended/ | grep -v 'lock' | sort) ))
  

Above Array包含主目录较少的所有帐户   超过1GB的限制。

whmapi1 modifyacct user=${L[@]} BACKUP=0 && whmapi1 modifyacct user=${S[@]} BACKUP=0
  

Above命令禁用所有用户的备份以启动,从   争吵。

whmapi1 modifyacct user=${S[@]} BACKUP=1

T

  

他的命令为家庭目录较少的所有帐户启用备份   大于1 GB

/usr/local/cpanel/bin/backup --force
  

此命令为所有启用的用户启动备份过程。

逻辑是,我想先创建小帐户的备份,然后在完成后再为较大的帐户运行。

问题:直接在终端中运行时,所有命令均成功执行,但通过脚本运行时则未成功执行。在启用和禁用帐户时出现问题。 按照脚本的逻辑,它要么禁用所有帐户,要么启用所有帐户,而不是部分帐户。

谁能指出我想念的地方和内容? 在此先感谢!!

1 个答案:

答案 0 :(得分:2)

${l[@]}扩展为user1 user2 user3 ...,所以user=${L[@]}扩展为user=user1 user2 user3 ...,如果您想让每个用户都开心,就需要遍历用户。

du_buff=$(du -h --max-depth=1 /home 2>/dev/null)
lock_buff=$(ls -al /var/cpanel/suspended/ | grep -v 'lock' | sort)
L=($(comm -23 <(echo "$du_buff" | grep G |  awk -F"/" '{print $NF}' | sort | egrep -vw '(home|virtfs)') <(echo "$lock_buff") ))
S=($(comm -23 <(echo "$du_buff" | egrep -v '(!G|.cp|cP|clamav)' | awk -F"/" '{print $NF}' | sort | egrep -vw '(home|virtfs)') <(echo "$lock_buff") ))

# for every user in L and S
for user in "${L[@]}" "${S[@]}"; do
     whmapi1 modifyacct user=$user BACKUP=0
done
# for every user in S
for user in "${S[@]}"; do
     whmapi1 modifyacct user=$user BACKUP=1
done
/usr/local/cpanel/bin/backup --force