Debian 将网络接口配置为网桥/网络交换机
2024年3月29日我设置了一个名为 dest=”/nas100/backups/servers/z/zebra/mysql.tgz” 的 shell 变量。如何在 Linux 或 Unix 操作系统下运行的 bash 程序中找到文件名(mysql.tgz)和扩展名(.tgz)?
该$字符用于参数扩展和命令替换。您可以根据需要使用它来操作和/或扩展变量,而无需使用
教程详情 | |
---|---|
难度级别 | 简单的 |
根权限 | 否/是 |
要求 | 重击 |
美东时间。阅读时间 | 2分钟 |
外部命令,例如 cut、tr、sed 或 awk。
找出文件名
删除模式($VAR 前面)的语法如下:
${var#Pattern} ${var##Pattern}
要获取文件名,请输入:
dest = "/nas100/backups/servers/z/zebra/mysql.tgz" echo " ${dest##*/} "
或者
dest = "/nas100/backups/servers/z/zebra/mysql.tgz" f = " ${dest##*/} " echo " ${f} "
输出示例:
mysql.tgz
找出文件扩展名
删除 $VAR 后面的模式的语法如下:
dest = "/nas100/backups/servers/z/zebra/mysql.tgz" echo " ${dest##*.} "
或者
dest = "/nas100/backups/servers/z/zebra/mysql.tgz" e = " ${dest##*.} " echo " ${e} "
输出示例:
tgz
提取文件名,即不带扩展名的文件名
删除 $VAR 后面的模式的语法如下:
${var%pattern} ${var%%pattern}
要获取不带扩展名的文件名,请输入:
dest = "/nas100/backups/servers/z/zebra/mysql.tgz" ## 获取文件名,即基本名称,例如 mysql.tgz tempfile = " ${dest##*/} " ## 显示文件名 echo " ${临时文件%.*} "
输出示例:
mysql
把它们放在一起
#!/bin/bash ## A sample shell script to demo concept of shell parameter expansion ## Usage: backup.bash /path/to/backup.tar.gz ## Author: example <www.example.com> under GPL v2.x+ ## ------------------------------------------------------------------- ## Get our script name ## _me="${0##*/}" ## get filename from cmd arg $1 _backuppath="$1" ## Failsafe [[ $# -ne 1 ]] && { echo -en "Usage:t$_me /path/to/file.tarnt$_me /path/to/file.tgzn"; exit 1; } ## Backup these dirs _what="/etc /home /root" ## Get dirname _dirname="${_backuppath%/*}" # Get filename _filename="${_backuppath##*/}" # Get file extension _extesion="${_filename##*.}" # Set tar options _opt="" # Old backup file name starts with _oldsuff="old" ## Okay log data to syslog logger "$_me backup job started at $(date)@${HOSTNAME}" ## make decision based upon file extension [[ "$_extesion" == "tgz" ]] && { _opt="zcvf"; _oldpref="tgz"; } [[ "$_extesion" == "tar" ]] && { _opt="cvf"; _oldpref="tar"; } ## Just display commands for demo purpose ## echo "tar $_opt /tmp/${_filename} $_what" echo "mv -f ${_backuppath} ${_dirname}/${_oldsuff}.${_filename%.*}.${_oldpref}" echo "cp -f /tmp/${_filename} ${_backuppath} " logger " $_me备份作业于$(date) @ ${HOSTNAME}结束"
按如下方式运行脚本:
backup.bash /backcup/data/server42/latest.tar
示例输出:
tar cvf /tmp/latest.tar /etc /home /root mv -f /backcup/data/server42/latest.tar /backcup/data/server42/old.latest.tar cp -f /tmp/latest.tar /backcup /data/server42/latest.tar
再次运行如下:
backup.bash /backcup/data/server42/latest.tgz
示例输出:
tar zcvf /tmp/latest.tgz /etc /home /root mv -f /backcup/data/server42/latest.tgz /backcup/data/server42/old.latest.tgz cp -f /tmp/latest.tgz /backcup /data/server42/latest.tgz
推荐读物
- 操作方法:像专业人士一样使用 Bash 参数替换
- 手册页 – bash