最近在一次代码审查中,一位同事声称该[[ ]]
构造比[ ]
在类似的构造中更受欢迎
if [ "`id -nu`" = "$someuser" ] ; then
echo "I love you madly, $someuser"
fi
Run Code Online (Sandbox Code Playgroud)
他无法提供理由.有吗?
有人能告诉我是否应该在shell脚本中包含变量的引号?
例如,以下是正确的:
xdg-open $URL
[ $? -eq 2 ]
Run Code Online (Sandbox Code Playgroud)
要么
xdg-open "$URL"
[ "$?" -eq "2" ]
Run Code Online (Sandbox Code Playgroud)
如果是这样,为什么?
我正在尝试在Ubuntu中编写一个非常简单的脚本,它允许我传递文件名或目录,并且能够在它是文件时执行特定的操作,而当它是目录时则执行其他操作.我遇到的问题是目录名称,或者也可能是文件,名称中包含空格或其他可以逃避的字符.
这是我下面的基本代码,以及几个测试.
#!/bin/bash
PASSED=$1
if [ -d "${PASSED}" ] ; then
echo "$PASSED is a directory";
else
if [ -f "${PASSED}" ]; then
echo "${PASSED} is a file";
else
echo "${PASSED} is not valid";
exit 1
fi
fi
Run Code Online (Sandbox Code Playgroud)
这是输出:
andy@server~ $ ./scripts/testmove.sh /home/andy/
/home/andy/ is a directory
andy@server~ $ ./scripts/testmove.sh /home/andy/blah.txt
/home/andy/blah.txt is a file
andy@server~ $ ./scripts/testmove.sh /home/andy/blah\ with\ a\ space.txt
/home/andy/blah with a space.txt is not valid
andy@server~ $ ./scripts/testmove.sh /home/andy\ with\ a\ space/
/home/andy with a space/ …
Run Code Online (Sandbox Code Playgroud) 在他的回答中, @ Grundlefleck解释了如何检查目录是否存在.我尝试了一些在内部使用这个makefile
如下:
foo.bak: foo.bar
echo "foo"
if [ -d "~/Dropbox" ]; then
echo "Dir exists"
fi
Run Code Online (Sandbox Code Playgroud)
运行make foo.bak
(给定foo.bar
存在)会产生以下错误:
echo "foo"
foo
if [ -d "~/Dropbox" ]; then
/bin/sh: -c: line 1: syntax error: unexpected end of file
make: *** [foo.bak] Error 2
Run Code Online (Sandbox Code Playgroud)
我做的解决方法是有一个独立的bash脚本,其中实现了测试,我从中调用了脚本makefile
.然而,这听起来非常麻烦.有没有更好的方法来检查目录是否存在makefile
?
我无法在线找到问题的解决方案.
我想在Unix中调用一个函数,传入一个目录的路径,并知道它是否存在.opendir()
如果目录不存在则返回错误,但我的目标不是实际打开,检查错误,如果没有错误则关闭它,而只是检查文件是否是目录.
有没有方便的方法呢?
我正在使用此bash脚本代码在一个文件夹中循环浏览某些文件(所有以MOVIE开头的文件):
for i in MY-FOLDER/MOVIE*
do
Run Code Online (Sandbox Code Playgroud)
当文件夹中有文件时,它可以正常工作.但是当没有任何内容时,它会以某种方式继续使用它认为名为MY-FOLDER/MOVIE*的文件.
我怎么能避免它进入之后的事情
do
Run Code Online (Sandbox Code Playgroud)
如果文件夹中没有任何文件?
给定文件路径(例如/src/com/mot
),如何检查是否mot
存在,如果不使用Linux或shell脚本,则创建它?
如果尚未安装,我该如何执行安装?
这是在OS X 10.9上,这是我目前所拥有的:
#!/bin/bash
# Local mount point
LOCALMOUNTPOINT="/folder/share"
# Perform the mount if it does not already exist
if ...
then
/sbin/mount -t smbfs //user:password@serveraddress/share $LOCALMOUNTPOINT
else
echo "Already mounted"
fi
Run Code Online (Sandbox Code Playgroud) 我正在创建一个简单的备份脚本,我想检查一个目录是否存在于给定路径中,如下所示:
fullPath=/usr/local/webapps/mydir
if mydir exists in my $fullPath
then back it up
else give error
fi
Run Code Online (Sandbox Code Playgroud)
我的问题是我如何制定if语句来检查$ fullPath变量中是否存在最后一个目录?只是为了澄清,对于这种情况,如果我使用/ usr/local它将是mydir它将是本地等.
提前致谢!
我想检查一个目录是否存在,它是否具有访问权限; 如果是,则执行任务.这是我写的代码,可能没有正确的语法.
你能帮我纠正一下吗?
dir_test=/data/abc/xyz
if (test -d $dir_test & test –x $dir_test -eq 0);
then
cd $dir_test
fi
Run Code Online (Sandbox Code Playgroud)
我相信这也可以这样写.
dir_test=/data/abc/xyz
test -d $dir_test
if [ $? -eq 0 ];
then
test –x $dir_test
if [ $? -eq 0 ];
then
cd $dir_test
fi
fi
Run Code Online (Sandbox Code Playgroud)
我们怎样才能更有效地写这个?
因此,我正在浏览目录,并想测试目录的每个元素是否都是目录:
FILES=$PWD/*
for f in $FILES
do
if [ $f is a directory ]; then #Correct conditional needed here
echo "Dir: $f"
fi
done
Run Code Online (Sandbox Code Playgroud)
我应该使用什么方法/功能来测试$ f是否是目录?
我有一个bash脚本,它依赖于一组现有的文件夹,但是每次我在新机器上使用脚本时都不想手工创建文件夹.
现在我有以下内容用于目录检测和创建(取自此处):
for i in {7..0}
do
if [ ! -d "backup.${i}" ]; then
mkdir backup.${i}
fi
done
Run Code Online (Sandbox Code Playgroud)
这通过'backup.7'检测并创建文件夹'backup.0'就好了,但必须有更优雅的方法来执行此操作.