我正在研究一些我将数据存储在文件中的东西.但每次我运行脚本时,它都会附加到上一个文件中.
我想要有关如何删除文件的帮助,如果它已经存在.
我想编写一个shell脚本来检查某个文件archived_sensor_data.json
是否存在,如果存在,则删除它.在http://www.cyberciti.biz/tips/find-out-if-file-exists-with-conditional-expressions.html之后,我尝试了以下方法:
[-e archived_sensor_data.json] && rm archived_sensor_data.json
Run Code Online (Sandbox Code Playgroud)
但是,这会引发错误
[-e: command not found
Run Code Online (Sandbox Code Playgroud)
当我尝试test_controller
使用该./test_controller
命令运行生成的脚本时.代码有什么问题?
有人能告诉我是否应该在shell脚本中包含变量的引号?
例如,以下是正确的:
xdg-open $URL
[ $? -eq 2 ]
Run Code Online (Sandbox Code Playgroud)
要么
xdg-open "$URL"
[ "$?" -eq "2" ]
Run Code Online (Sandbox Code Playgroud)
如果是这样,为什么?
Bash文档中的 about -a
和-e
options 都说:
-a file
True if file exists.
-e file
True if file exists.
Run Code Online (Sandbox Code Playgroud)
试图找出差异,我运行了以下脚本:
resin_dir=/Test/Resin_wheleph/Results
if [ -e ${resin_dir} ] ; then
echo "-e ";
fi
if [ ! -e ${resin_dir} ] ; then
echo "! -e";
fi
if [ -a ${resin_dir} ] ; then
echo "-a";
fi
if [ ! -a ${resin_dir} ] ; then
echo "! -a";
fi
Run Code Online (Sandbox Code Playgroud)
/Test/Resin_wheleph/Results
存在并且是一个目录.这就是我得到的:
-e
-a
! -a
Run Code Online (Sandbox Code Playgroud)
这似乎有点奇怪(注意-a
和 ! -a
).但是当我if [[ …
通常在为bash shell编写时,需要测试文件(或目录)是否存在(或不存在)并采取适当的操作.这些测试中最常见的是......
-e
- 文件存在,-f
- 文件是常规文件(不是目录或设备文件),-s
- 文件不是零大小,-d
- 文件是目录,-r
- 文件具有读取权限,-w
- 文件具有写入或-x
执行权限(对于用户)运行测试)
这很容易确认,如此用户可写目录所示 ....
#/bin/bash
if [ -f "/Library/Application Support" ]; then
echo 'YES SIR -f is fine'
else echo 'no -f for you'
fi
if [ -w "/Library/Application Support" ]; then
echo 'YES SIR -w is fine'
else echo 'no -w for you'
fi
if [ -d "/Library/Application Support" ]; then
echo 'YES SIR -d is fine'
else …
Run Code Online (Sandbox Code Playgroud) 我已经使用了两年的bash,并试图通过自制软件在我的OS X上切换到zsh shell.我将我的默认(登录)shell设置为zsh,并通过查看当我启动终端时确认它设置正确,它是默认使用的zsh shell.
但是,当我尝试从zsh中输入bash shell时,它看起来没有加载~/.bash_profile
,因为我无法使用别名运行我的命令,这是我~/.bash_profile
喜欢的alias julia="~/juila/julia"
等等.此外,提示不是我在文件中设置的而是返回bash-3.2$
.
出于某些原因,当我将登录shell设置为bash,并从bash中输入zsh时,则~/.zshrc
正确加载.
那么为什么每当我bash
在zsh中运行时它都没有被加载?我~/.bash_profile
是符号链接~/Dropbox/.bash_profile
,以便与我的其他计算机同步.也许它会导致这个问题?
我有一个使用Python编写的守护进程.当它运行时,它有一个位于/tmp/filename.pid的PID文件.如果守护程序未运行,则PID文件不存在.
在Linux上,如何检查以确保PID文件存在,如果不存在,请执行命令重新启动它?
命令是
python daemon.py restart
Run Code Online (Sandbox Code Playgroud)
必须从特定目录执行.
我有一个脚本,它是发送电子邮件的其他链中的一个脚本.
在脚本开始时,我想检查文件是否存在,只有在存在时才继续,否则只是退出.
这是我的脚本的开始:
if [ ! -f /scripts/alert ];
then
echo "File not found!" && exit 0
else
continue
fi
Run Code Online (Sandbox Code Playgroud)
但是我不断收到一条消息说:
line 10: continue: only meaningful in a `for', `while', or `until' loop
Run Code Online (Sandbox Code Playgroud)
有什么指针吗?
在bash
脚本中,我必须检查是否存在多个文件.
我知道一种笨拙的方法,如下所示,但这意味着我的主程序必须在那个丑陋的嵌套结构中:
if [ -f $FILE1 ]
then
if [ -f $FILE2 ]
then
echo OK
# MAIN PROGRAM HERE
fi
fi
Run Code Online (Sandbox Code Playgroud)
以下版本不起作用:
([ -f $FILE1 ] && [ -f $FILE2 ]) || ( echo "NOT FOUND"; exit 1 )
echo OK
Run Code Online (Sandbox Code Playgroud)
它打印
NOT FOUND
OK
Run Code Online (Sandbox Code Playgroud)
有一种优雅的方式来做到这一点吗?
更新:查看接受的答案.另外,在优雅方面我喜欢Jonathan Leffler的回答:
arg0=$(basename $0 .sh)
error()
{
echo "$arg0: $@" 1>&2
exit 1
}
[ -f $FILE2 ] || error "$FILE2 not found"
[ -f $FILE1 ] || …
Run Code Online (Sandbox Code Playgroud) 所以我正在尝试检查文件是否存在,然后脚本应该执行某些操作.我遇到的问题实际上是让它认识到某些东西确实存在.
if [ -e /temp/file.txt ]; then
echo "file found!"
sudo cp -r temp/* extra
else
echo "file not found! Creating new one..."
./create.sh
fi
Run Code Online (Sandbox Code Playgroud)
下面是我正在测试的目录中的文件示例.它们显然存在,但由于某种原因,我无法让脚本看到它.我究竟做错了什么?
nima@mkt:/docs/text$ ls -a temp
. .. more file.txt file2.txt
Run Code Online (Sandbox Code Playgroud) 我正在尝试构建一个条件,检查文件是否已设置执行访问位.我不能用grep找到.
我尝试检查ls -l
命令中的"x"字母,但在许多情况下这是错误的.
for val in `ls $1`
do
if [[ "`ls -l $1/$val`" -eq *w* ]]
then
rm $1/$val
fi
done
Run Code Online (Sandbox Code Playgroud)
请帮忙或给出一些建议!
检查我的计算机上是否存在文件很容易.但是如何检查我的服务器上是否存在此文件?
如果我的文件是:
host@server:/path/to/my/file.txt
Run Code Online (Sandbox Code Playgroud)
我需要做什么来检查它是否存在?
假设我有一个文件/local/content/en/abc.html
,我有一个相同的文件/local/en/abc.html
.我想添加一个观察程序,/local
以便/local/content/en/abc.html
在删除后自动删除该/local/en/abc.html
文件.
我怎样才能做到这一点?我有一个Linux环境.这可以是一个bash文件,它将是/local
目录.