我需要获取数据库名称并将其用作文件名部分的变量。目前我从 ls 命令中提取文件名。这就是它的回报:
试验20150311-1200.sql
我需要文件名的第一部分到“ - ”,所以对于这个例子,它将是Test。我怎样才能获得变量的部分文件名?下面是我正在处理的完整脚本。任何帮助都会很棒。感谢。
#!/bin/bash
DB_USER=x
DB_PASS=x
DB=
for DB_GZFILE in $( ls *.sql.gz ); do
gunzip $DB_GZFILE
echo item: $DB_FILE unzipped
done
for DB_FILE in $( ls *.sql ); do
#Use this statement to insert dump into a new server
mysql $DB <$DB_FILE
done
#Use this command to insert into a server already in use
# mysql -u$DB_USER -p$DB_PASS <$DB_FILE
echo $DB_FILE inserted into database
done
#Remove sql files used to insert into this server
# rm $DB_FILE
# echo $DB_FILE removed
done
echo restarting the mysql process .....
# /etc/init.d/mysql restart
echo mysql restarted
done
答案 0 :(得分:3)
for DB_GZFILE in *.sql.gz; do
for DB_FILE in *.sql; do
要获取第一部分,请使用parameter substitution删除第一个-
以及所有后续字符:
first_part=${DB_FILE%%-*}
您应该引用所有"$vars"
,尤其是您从用户或文件系统获得的任何值:您永远不知道何时会获得带有空格的文件名。例如:
gunzip "$DB_GZFILE"
我建议你不要使用ALL_CAPS_VARNAMES:有一天你会accidentally use PATH=...
,然后想知道为什么你的脚本坏了。保留ALL_CAPS以获取系统环境变量和shell特殊变量。