我是 Linux Shell 脚本的新手。我想通过 Linux Shell 脚本更改 IP 地址并由 PHP Web 应用程序调用。
我已经完成了我的 PHP Web 应用程序和 Shell 脚本。在它们组合在一起并工作之前,我想测试一下 Shell 脚本是否可以正常运行。
我的 Linux Shell 脚本将存储 7 个变量(不包括 $0(脚本名称)):
- 网络接口文件 (
/etc/sysconfig/network-scripts/ifcfg-{XXX}
) - 旧 IP 地址
- 新 IP 地址
- 旧子网掩码
- 新子网掩码
- 老门户
- 新门户
由于我是 Linux Shell 脚本的新手,大多数检查已由我的 PHP 应用程序执行,我不想在我的 shell 脚本上执行此操作。我的 PHP 应用程序可以确保数据正确并填充了值。
因此,要运行此 Shell 脚本,我输入以下内容以查看结果:
sh ./ipchanger.sh /etc/sysconfig/network-scripts/ens32 192.168.1.18 192.168.1.201 32 24 192.168.1.1 192.168.1.1
意义:
- 指定目标网络脚本文件。
- 将 IP 从 更改
192.168.1.18
为192.168.1.201
。 - 将子网掩码从 更改
255.255.255.255
为255.255.255.0
。
实际上它将运行以下命令:
sudo sed -i -r "s/$currentIpAddress/$newIpAddress/g" $fileName
sudo sed -i -r "s/$currentSubnetMask/$newSubnetMask/g" $fileName
sudo sed -i -r "s/$currentGateway/$newGateway/g" $fileName
它没有返回任何错误,看起来不错,因为网络脚本文件的最后修改日期已更新。但是当我打开文件时,什么都没有改变。
然后我输入echo
命令,它返回我想要的确切命令。然后我通过命令提示符运行所有三行并再次检查文件,所有信息都已更改!
答案1
问题很可能出sudo
在每行开头的部分。 sudo
暗示“以 root 身份运行”。您可能会发现,实际上,您在命令行中登录的帐户已设置为/etc/sudoers
从命令行运行,但不是通过 PHP 脚本运行 - 事实上,当您通过 Web 用户运行它时,您需要考虑这一点的含义 - Web 用户可能不会被设置/etc/sudoers
- 也不应该!
您可以通过将文件的所有权更改为您自己并运行脚本来测试此理论sudo
。要更改文件所有权,只需chown filename.ext
我认为你会更好:
- 创建一个新目录
/var/www
(或任何您觉得方便并且网络用户可以访问的地方) - 将适当的配置文件移动到该目录
- 将单个文件或包含它的目录符号链接到 www。
- 将这些文件的所有权更改为 WWW 目录
- 删除每个命令开头的 sudo。更好的是,为什么不删除调用脚本,而只是在 PHP 中编写更改。