gpt4 book ai didi

linux - 解析文件名的一部分以用作 bash 中的变量

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:51:59 25 4
gpt4 key购买 nike

我需要获取数据库名称并将其用作文件名一部分的变量。目前我让它从 ls 命令中提取文件名。这是它返回的内容:
Test-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

最佳答案

Don't parse ls

    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=...然后想知道为什么你的脚本坏了。为系统环境变量和 shell 特殊变量保留 ALL_CAPS。

关于linux - 解析文件名的一部分以用作 bash 中的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29058271/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com