shell脚本中的条件mysql操作
我有以下shell脚本,它将shell脚本中的条件mysql操作,mysql,bash,shell,unix,Mysql,Bash,Shell,Unix,我有以下shell脚本,它将find命令中的卷写入文件,并将该文件加载到mysql数据库中: # find all the paths and print them to a file sudo find $FULFILLMENT/ > $FILE sudo find $ARCH1/ >> $FILE sudo find $ARCH2/ >> $FILE sudo find $MASTERING/ >> $FILE # load the file in
find
命令中的卷写入文件,并将该文件加载到mysql数据库中:
# find all the paths and print them to a file
sudo find $FULFILLMENT/ > $FILE
sudo find $ARCH1/ >> $FILE
sudo find $ARCH2/ >> $FILE
sudo find $MASTERING/ >> $FILE
# load the file into the mysql database, `files`, table `path`
/usr/local/bin/mysql -u root files -e "TRUNCATE path"
/usr/local/bin/mysql -u root files -e "LOAD DATA INFILE '/tmp/files.txt' INTO TABLE path"
TRUNCATE
用于在添加新条目之前删除所有旧条目。但是,如果任何find
命令不起作用(例如,如果卷不可访问),我希望它跳过两个mysql
命令。如何修改上述脚本以实现此目的?类似于:
sudo find $FULFILLMENT > $FILE || exit 1
您可以使用#/bin/bash-e
或在find命令上方添加一行带有set-e
。这样,一旦命令失败,Bash就会自动中止。默认情况下始终执行此操作是一种很好的做法,因为当上一个命令失败时,您很少希望继续:
set -e
# find all the paths and print them to a file
sudo find $FULFILLMENT/ > $FILE
sudo find $ARCH1/ >> $FILE
sudo find $ARCH2/ >> $FILE
sudo find $MASTERING/ >> $FILE
# load the file into the mysql database, `files`, table `path`
/usr/local/bin/mysql -u root files -e "TRUNCATE path"
/usr/local/bin/mysql -u root files -e "LOAD DATA INFILE '/tmp/files.txt' INTO TABLE path"
只有在所有
find
命令成功时,才会执行两个mysql
命令:
# find all the paths and print them to a file
sudo find $FULFILLMENT/ > $FILE &&
sudo find $ARCH1/ >> $FILE &&
sudo find $ARCH2/ >> $FILE &&
sudo find $MASTERING/ >> $FILE &&
{
# load the file into the mysql database, `files`, table `path`
/usr/local/bin/mysql -u root files -e "TRUNCATE path"
/usr/local/bin/mysql -u root files -e "LOAD DATA INFILE '/tmp/files.txt' INTO TABLE path"
}
&&
运算符仅在LHS上的命令成功时,才会使RHS上的命令运行。{…}
将两个mysql
命令组合成一个复合命令,因此要么都运行(如果最后一个find
成功),要么都不运行(如果最后一个find
未成功)
如果您的脚本有更多内容需要运行,无论
find
s是否成功,以及mysql
命令是否运行,您都可以使用它。您可以展示一行完整的代码示例吗?嗯,set-e
是一行完整的代码示例,但我在您的脚本上下文中添加了它。