我在 Debian 系统中运行以下代码:
for File in "${Files[@]}"; do
if test "`find $FolderDownload/$File -cmin -190`" ; then
echo "File is new then 3 hours"
# Set concatenation
FileConcat=1
# Get out ot next step
break
else
echo "There's no change in the $File in past 6 hours"
fi
done
如何在 FreeBSD 系统上的默认 csh 上使用它?
其实我正在尝试:
foreach File ($Files)
if (test find $FolderDownload/$File -cmin -190) then
echo "File is new then 3 hours"
# Set concatenation
FileConcat=1
# Get out ot next step
break
else
echo "There's no change in the $File in past 6 hours"
endif
end
但它返回错误:
if: Expression Syntax.
变量的内容是这样的:
文件 = {"File1.txt","File2.txt","File3.txt","File4.txt"}
文件夹下载 =“/var/scripts/”
文件连接 = 0
答案1
您在评论中表示您知道:
- 如何安装 bash。
- 不要更改 root 的默认 shell。
- Bash 不会安装到 /bin 中,因此在单用户模式下无法直接使用。
- toor用户的。
以上所有内容都是正确的并且对您有好处!
一个小误解,并不重要。 toor 用户就是为此目的而创建的。它有 uid 0(和 root 一样),所以你可以设置任何你喜欢的 shell托尔。
一个更大的误解是大多数 FreeBSD 脚本都是用 (t)csh 编写的。他们不是!系统脚本是用sh编写的。看看/bin/freebsd-version
或者/usr/bin/zdiff
Bash 不是 FreeBSD 操作系统的一部分。但如果你安装并使用它,系统并不会变得不纯净。您甚至不必更改用户 shell。但如果你这样做了——就不要把你的手放在root上。
然而,目前还有更大的问题。
不要在csh中编写脚本!
即使默认的 root shell 是 (t)csh,你也不应该在任何系统上编写 csh 脚本。这是相当普遍的共识,如果你需要完整的故事,请阅读CSH 编程被认为是有害的
舍邦
每当你编写脚本时,你应该以“shebang”开始第一行(更多内容请参见巴什谢邦)。这告诉系统在执行脚本时使用哪个解释器。您可以毫无问题地从 csh 执行 bash(或 perl/zsh/etc)脚本。
为了获得最佳的便携性使用:
#!/usr/bin/env bash
这将通过 $PATH 查找 bash 的位置。对我来说这是最好的解决方案。
其他人则主张您永远不应该这样做,而应该指定确切的位置。然后,这会向目标系统添加一个要求。要么更新 shebang shen 移动脚本,要么确保目标系统在 /bin 中有指向 bash 的链接。
使用 sh 实现广泛的可移植性
如果您想要更好的可移植性,请使用 sh shell 进行脚本编写。它的功能比 bash 少,但您可以确定它在所有 POSIX(类似)系统上都可用。
Shell 脚本很难!
编写正确的 shell 脚本可能非常困难。可以帮助您的第一个也是最好的工具是外壳检查。你可以安装它本地以及。
养成检查脚本的习惯——这会让你免去很多麻烦。