让用户在 bash 中选择输出文件的名称



我有这个脚本,它对某些文件执行多个操作,然后最终创建一个输出文件,称为flashable.zip。我想在用户运行脚本时实现这一点,它首先要求最后输出文件名。文件名预定义为如下所示:1.22.33_DA.zip,用户可以在其中选择1.22.33部分 - 这就像命名文件的版本一样。而且它必须严格,所以用户不要在 1.22.33 部分使用字母。

我确定我可以为此使用类似 grep 的东西,但我完全迷失在如何做到这一点:(而且我对 bash 脚本相当陌生,所以我仍在学习,我得到的脚本可能看起来很混乱,可能会清理一下:)

我认为这只是在操作完成后重命名创建的zip文件的东西,但我不确定..

这是我的脚本:

#!/bin/bash

echo ""
echo "[--- Creating flashable zip ---]"
echo ""
tlock=/home/dan/buildtool/flashable/template/system/media/theme/default
dst=/home/dan/buildtool/flashable/system/media/theme/default
src=/home/dan/buildtool/translations/ma-xml-4.0-danish/extras/lockscreen
parent=/home/dan/buildtool/flashable
src2=/home/dan/buildtool/apk_out
home=/home/dan/buildtool
cd $parent
mkdir system
cd system
mkdir app
mkdir framework
mkdir media
cd media
mkdir theme
mkdir audio
cd theme
mkdir default
cd $parent/system/media/audio
mkdir ringtones
mkdir alarms
mkdir notifications
cd $home

for apk in $(<$home/translation_list.txt); do cp -r -f "$src2/$apk" $parent/system/app; done
mv -f $parent/system/app/framework-miui-res.apk $parent/system/framework
cp -f $parent/template.zip $parent/flashable.zip
cp -f -r $parent/template/system/media/audio $parent/system/media
7za u -tzip $tlock/lockscreen.zip $src/advance
cp -f $tlock/lockscreen.zip $tlock/lockscreen
cp -f $tlock/lockscreen $dst
7za a -tzip $parent/flashable.zip $parent/system -mx3
rm -r $parent/system
cd /home/dan/buildtool

这将读取用户输入并通过正则表达式验证版本。

#!/bin/bash
echo -n "Enter version and press [ENTER]: "
read ver
[[ "$ver" =~ ^[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}$ ]] && echo "${ver}_DA.zip" || echo "Invalid"

输出

Enter version and press [ENTER]: 111.222.333
111.222.333_DA.zip
Enter version and press [ENTER]: 1.2222.33
Invalid
Enter version and press [ENTER]: 1.222.3333
Invalid

解释

  • read ver 将用户输入读入 ver 变量。
  • ^[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}$

    1) ^ 字符串的开头

    2) [0-9] 0 到 9 之间的任何数字

    3) {1,3} 至少匹配 1 到 3 个字符

    4) . 匹配一个点

    5) .[0-9]{1,3} 重复模式两次

    7) $ 匹配字符串结尾

相关内容

  • 没有找到相关文章