Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
shell脚本中的条件mysql操作_Mysql_Bash_Shell_Unix - Fatal编程技术网

shell脚本中的条件mysql操作

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

我有以下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 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
是一行完整的代码示例,但我在您的脚本上下文中添加了它。