我经常.sh在条件 sintaxis 中的文件Shell Script 中找到这样的:
if [ -n "condition" ]; then ...
if [ -z "condition "]; then ...
if [ -x "condition" ]; then ...
if [ -L "condition" ]; then ...
if [ -d "condition" ]; then ...
Run Code Online (Sandbox Code Playgroud)
这些 -n, -z, -x, -L, -d是函数或者它是如何命名的,它的目的是什么?
我对bash编程有点挣扎,因为我似乎不理解语法规则.例如:
read confirm
if [ "$confirm" == "yes" ]; then
echo "Thank you for saying yes"
else
echo "Why did you say no?"
fi
Run Code Online (Sandbox Code Playgroud)
在此代码中,您可以使用许多表单来执行相同的操作:
"$confirm" == "yes"
$confirm == "yes"
"$confirm" == yes
$confirm == yes
Run Code Online (Sandbox Code Playgroud)
那么规则是什么?除此之外,它非常严格,所以如果你在'['和'''之间没有空格的情况下编写上面的if语句,你就会收到错误.所以我的问题是:
此致,
拉菲德
我想运行棉绒git status,然而似乎没有什么pre-status也不post-status钩。一个人怎么能给git加个钩子呢?该精细的文档对此事可疑的沉默!
我目前正在git status用Lash脚本包装短绒,但是我更喜欢支持我的肌肉记忆宏的解决方案git status。如果重要的话,我正在使用KDE 4运行CentOS 7.3。
以下内容不返回任何内容:
which asdf
Run Code Online (Sandbox Code Playgroud)
那么,为什么在这里触发if语句呢?
x=$(which asdf)
if [ -f $x ]; then echo "exists"; fi
Run Code Online (Sandbox Code Playgroud) 我正在尝试向 crontab 添加一个新条目,我遇到的问题是所有其他条目都是这样编写的:
0 0 * * * [ -x /home/test/test_reports/nightly ] && /home/test/test_reports/nightly
Run Code Online (Sandbox Code Playgroud)
的目的是[ -x /home/test/test_reports/nightly ]什么?
我试图谷歌它但没有运气..
我使用了在单独的脚本中定义的以下 tmux 快捷函数并设置了别名,它运行良好但很混乱。我决定将它移到.zshrc它自然属于我的地方,但遇到了一个我无法弄清楚的问题。
function t () {re='^[0-9]+$'
if [ "$1" == "kill" ]
then
tmux kill-session -t $2
elif [[ "$1" =~ "$re" ]]
then
tmux attach-session -d -t $1
fi}
Run Code Online (Sandbox Code Playgroud)
我获取 my .zshrc,调用该函数,然后得到:
t:1: = not found
Run Code Online (Sandbox Code Playgroud)
我知道函数是这样定义的:
??bennett@Io [~] using
??? which t
t () {
re='^[0-9]+$'
if [ "$1" == "kill" ]
then
tmux kill-session -t $2
elif [[ "$1" =~ "$re" ]]
then
tmux attach-session -d -t $1
fi
}
Run Code Online (Sandbox Code Playgroud)
我假设这是在抱怨函数的第一行。我试过将函数的第一行向下移动几行,除了错误消息所指的那一行之外,它不会改变任何东西。有什么线索吗?我在 SO 上没有找到与此特定问题相关的任何内容。
我是bash脚本的新手.我想比较一下我在另一个目录中使用的文件数量ls.然后我需要将那里的文件数量与我拥有的变量进行比较.
if [ (cd reports_dir/ && ls) | wc -gt $MAXIMUM_REPORTS ]; then
echo hello
fi
Run Code Online (Sandbox Code Playgroud)
此代码提供错误:
./monitor.sh: line 70: syntax error near unexpected token `cd'
./monitor.sh: line 70: ` if [(cd reports_dir/ && ls) | wc -gt $MAXIMUM_REPORTS]; then'
Run Code Online (Sandbox Code Playgroud)
我知道为什么cd会出乎意料.(cd reports_dir/ && ls) | wc当我在终端中运行它时,该命令有效.
此命令将在while循环中运行,因此将重复调用它.因此,我实际上无法进入目录,因为它尝试cd多次,导致错误.
我有这个:
while [ "ps aux | grep '[0]:00 Xvfb :99 -screen 0 1024x768x16'" ]
do
echo "sleep"
ps aux | grep "[0]:00 Xvfb :99 -screen 0 1024x768x16"
sleep 1
done
Run Code Online (Sandbox Code Playgroud)
这给了我:
sleep
sleep
sleep
sleep
sleep
sleep
root 7 0.5 1.5 207336 31620 ? Sl 09:31 0:00 Xvfb :99 -screen 0 1024x768x16
sleep
root 7 0.4 1.5 207336 31620 ? Sl 09:31 0:00 Xvfb :99 -screen 0 1024x768x16
sleep
root 7 0.3 1.5 207336 31620 ? Sl 09:31 0:00 Xvfb …Run Code Online (Sandbox Code Playgroud) 我似乎在编写一段代码时遇到了麻烦(至少我认为无论如何).这是一个脚本,它解析一个名为test3_data.txt的文本文件,其中包含一堆用户ID,并将这些用户ID放入一个名为"USER_ID"的变量中.然后我测试它们是否有一个主目录,其中包含USER_ID变量中的任何文本.如果是这样,它将从系统中删除用户及其文件,主目录等.该脚本工作正常,但是当它完成运行时,userdel命令的手册页会显示出来.反正有没有阻止这种情况发生?我的代码有问题吗?谢谢!这是我的代码.
!/bin/sh
while read IN_RECORD
do
#Variable that reads user id
USER_ID=`echo $IN_RECORD |cut -d'|' -f1`
#Remove added users from data file.
test -d /home/{$USER_ID}
if [ "$?" = "1" ];
then
userdel -r $USER_ID
fi
done < test3_data.txt
Run Code Online (Sandbox Code Playgroud)