linux - 为什么bash脚本中的函数以root身份(使用sudo)抛出语法错误,而作为标准用户它可以工作?
问题描述
我正在编写一个脚本,其中包含一个创建新用户的函数,该函数需要以 root 身份运行才能工作,但是当我将脚本运行为:
sudo ./sample.sh
它抛出以下错误:
./sample: 3: 语法错误:"(" 意外
但是当我在没有 sudo 的情况下运行它时,我得到了这个输出:
-
-
useradd: Permission denied.
useradd: cannot lock /etc/passwd; try again later.
chage: user 'yt' does not exist in /etc/passwd
chage: user 'yt' does not exist in /etc/passwd
-
-
sed: can't read /etc/sudoers: Permission denied
sed: can't read /etc/sudoers: Permission denied
-
-
因此,该脚本正在与我的标准用户一起使用(这只是一个权限问题)。我不明白为什么它不能与 sudo 一起使用。我在互联网上发现我需要导出函数但仍然存在同样的问题,这是脚本:
############create user Function#
#!/bin/bash
function user_create ()
{
useradd -m -p '#SOME_PASSWD' -s /bin/bash $userName
sudo chage -m 5 -M 90 -I 30 -W 14 $userName
sudo chage --lastday 0 $userName
echo ''
echo '--------------------------------------------------------------------------------------------'
echo -e '\e[32mPasswd set for \e[1m'$userName' for 90 days MAX | 5 days MIN\e[0m'
echo -e '\e[32mPasswd is set to change the current passwd in next login for \e[1m' $userName
echo -e '\e[0m--------------------------------------------------------------------------------------------'
#User based policy#
sed -i "#SOME_SED_COMMAND" /etc/sudoers
sed -i "/#SOME_STRING/#NEW_STRING" /etc/sudoers
echo -e '\e[33m'
sudo cat /etc/sudoers | grep -i "$userName"
echo -e '\e[0m'
echo ''
echo '------------------------------------------------------------------'
echo -e '\e[1m\e[32mUser Privilege Set\e[0m'
echo '------------------------------------------------------------------'
return 0
}
export -f user_create
if [ -z $1 ]
then
echo -e 'e\1[m e\[100m e\[33m Do you want to CREATE A NEW USER?e\[0m (y/n)'
read createUser
if [ $createUser = 'y' -o $createUser = 'Y' ]
then
echo 'Enter USER.NAME:::: First_Name.Last_Name'
read userName
user_create
else
echo ''
echo '------------------------------------------------------------------'
echo -e '\e[31mNO NEW USER added.\e[0m'
echo '------------------------------------------------------------------'
fi
else
userName=$1
User_Create
fi
解决方案
为什么 bash 脚本中的函数会引发语法错误……?
线
#!/bin/bash
没有效果 - 它必须是第一行;因此脚本可能来自不同的环境,由不同的 shell 执行,其中一些具有不兼容的语法。
推荐阅读
- reactjs - 最新的 Babel (@babel/core v7) 错误“未定义导出”
- python-3.x - 字节必须在范围内(0, 256)
- c - 为什么 printf ("%d", ~a); 当 a 等于 3 时显示 -4?
- php - 无法从 laravel 5.7 发送推送事件
- javascript - Google 如何使用跨域 iframe 进行重新验证?
- fasthttp - 无法为 golang 的 fasthttp 框架设置 cookie
- php - MySQL - 查询月份的名称
- django - 将应用程序部署到 Azure 云时/时出现 ImportError
- java - 如何区分 Java 输入类型?
- c# - CIL:当分配给“.field”时,“class”关键字是什么意思?