一、读取参数
通过$1,$2这样表示读取的第一个第二个参数,$0是执行本个脚本文件的命令
二、判断文件(夹)是否存在
[ ! -d $1 ]:判断$1这个文件夹是否存在,不存在就创建
if [ ! -d $1 ]; then
mkdir $1
fi
需要注意的是,需要用/连接两个参数来表示要创建的文件夹名字时,不能直接用/,而要用‘“将/括起来
if [ ! -d $1"/"$2 ]; then
mkdir $1"/"$2
fi
三、文件名的处理
①根据路径名来提取文件名
因为有的处理需要对用旧的文件名来命名新的文件名,如将flac格式的音频文件转换为wav格式的文件
${file#*/}:删掉第一个/ 及其左边的字符串:dir1/dir2/dir3/my.file.txt
${file##*/}:删掉最后一个/ 及其左边的字符串:my.file.txt
${file#*.}:删掉第一个. 及其左边的字符串:file.txt
${file##*.}:删掉最后一个. 及其左边的字符串:txt
${file%/*}:删掉最后一个 / 及其右边的字符串:/dir1/dir2/dir3
${file%%/*}:删掉第一个/ 及其右边的字符串:(空值)
${file%.*}:删掉最后一个 . 及其右边的字符串:/dir1/dir2/dir3/my.file
${file%%.*}:删掉第一个 . 及其右边的字符串:/dir1/dir2/dir3/my
#表示删除左边,%表示删除右边,*表示匹配所有,所以在删除右边时是将匹配字符串*放在标识符(不论是/还是.)的右边,所以在删除右边时是将匹配字符串*放在标识符左边
②文件名的替换
主要是利用sed指令来实现:
newfile=`echo $file | sed 's/-//g'`
sedsed编辑器被称作流编辑器,以基于输入到命令行的或是存储在命令文本中的命令来处理数据流中的数据。它每次从输入中读取一行,用提供的编辑命令匹配数据、按命令中指定的方式修改流中的数据,然后生成的数据输出到STDOUT。
echo一般是用来处理文件中的字符串的,此时它是一次读一行,但是也有如上用来处理单独一个字符串的,此时就是用echo指令与管道 | 将要处理的字符串传给sed指令,sed指令的标准格式为
stdout | sed 's/pattern/replace/'
在上述例子中在末尾添加g用于替换所有匹配项,而不仅仅替换第一个匹配项,就是将stdout中的pattern替换为replace,当然有时还需要将字符串中的/符号进行替换,此时可以用其他的符号如#等来替换本来是作为各个参数之间的分隔符的/
`echo $1 | sed 's,//*,/,g'`
这个指令的含义就是将第一个参数中的//,或///这样连续两个及以上的/替换为一个/
四、字符串与变量的连接