shell脚本求助

sh/bash/dash/ksh/zsh等Shell脚本
回复
zcf115
帖子: 398
注册时间: 2009-06-28 10:06
系统: ubuntu12.04
送出感谢: 0
接收感谢: 6 次

shell脚本求助

#1

帖子 zcf115 » 2013-05-04 11:06

代码: 全选

#!/bin/bash

if [ "$#" -ne "0" ];then
	echo "Error:Must no argument."
	exit 1
fi

read -p "Please input the directory: " mp3dir

cd ${mp3dir:=/home/ubuntu}

mp3s=(`ls | grep mp3`)

if [ "${#mp3s[@]}" -eq "0" ];then
	echo "Error:There is no mp3 in this directory."
	exit 2
fi

echo ${#mp3s[@]}

for mp3 in "${mp3s[@]}";do
	echo ${mp3/.*}
done
求助啊,我ubuntu目录下有诸如 a.mp3、b c.mp3(中间为空格)等好多mp3文件,脚本会将 b c.mp3 识别为两个文件,b、c.mp3,如何更改呢。
Still Alive
头像
cnkilior
论坛版主
帖子: 4979
注册时间: 2007-08-05 17:40
送出感谢: 0
接收感谢: 5 次

Re: shell脚本求助

#2

帖子 cnkilior » 2013-05-04 11:19

"$i"
cao627
帖子: 992
注册时间: 2007-12-05 10:57
系统: ubuntu14.04
来自: 金山
送出感谢: 13 次
接收感谢: 62 次

Re: shell脚本求助

#3

帖子 cao627 » 2013-05-04 12:47

代码: 全选

for mp3 in *.mp3;do
   echo ${mp3/.*}       ###我这边环境好像加不加双引号没区别.
done
用数组的话:
mp3s=(`ls | grep mp3`) 替换为 eval mp3s=(`ls -Q *.mp3`)
上次由 cao627 在 2013-05-04 13:05,总共编辑 1 次。
zcf115
帖子: 398
注册时间: 2009-06-28 10:06
系统: ubuntu12.04
送出感谢: 0
接收感谢: 6 次

Re: shell脚本求助

#4

帖子 zcf115 » 2013-05-04 13:02

主要是想用下数组,结果还用不了。

Sent from my Lenovo A710e using Tapatalk 2
Still Alive
cao627
帖子: 992
注册时间: 2007-12-05 10:57
系统: ubuntu14.04
来自: 金山
送出感谢: 13 次
接收感谢: 62 次

Re: shell脚本求助

#5

帖子 cao627 » 2013-05-04 13:06

zcf115 写了:主要是想用下数组,结果还用不了。

Sent from my Lenovo A710e using Tapatalk 2
用数组的话:
mp3s=(`ls | grep mp3`) 替换为 eval mp3s=(`ls -Q *.mp3`)
zcf115
帖子: 398
注册时间: 2009-06-28 10:06
系统: ubuntu12.04
送出感谢: 0
接收感谢: 6 次

Re: shell脚本求助

#6

帖子 zcf115 » 2013-05-04 13:35

好的哦。我试下。

Sent from my Lenovo A710e using Tapatalk 2
Still Alive
zcf115
帖子: 398
注册时间: 2009-06-28 10:06
系统: ubuntu12.04
送出感谢: 0
接收感谢: 6 次

Re: shell脚本求助

#7

帖子 zcf115 » 2013-05-04 17:01

行了。

Sent from my Lenovo A710e using Tapatalk 2
Still Alive
zcf115
帖子: 398
注册时间: 2009-06-28 10:06
系统: ubuntu12.04
送出感谢: 0
接收感谢: 6 次

Re: shell脚本求助

#8

帖子 zcf115 » 2013-05-05 11:17

不过为啥换种方法就行了呢。

Sent from my Lenovo A710e using Tapatalk 2
Still Alive
aerofox
帖子: 1453
注册时间: 2008-05-24 8:30
送出感谢: 2 次
接收感谢: 31 次

Re: shell脚本求助

#9

帖子 aerofox » 2013-05-05 20:52

zcf115 写了:不过为啥换种方法就行了呢。
因为 ls 帮你加引号了。

不知你编写这个脚本的目的是什么,是为了学习还是解决问题。为了学语法没什么可说的,为了解决问题的话,没必要弄得这么复杂。cd 命令之后直接 for 循环就可以了:

代码: 全选

for mp3 in *.mp3; do
    echo "${mp3/.*}"
done
zcf115
帖子: 398
注册时间: 2009-06-28 10:06
系统: ubuntu12.04
送出感谢: 0
接收感谢: 6 次

Re: shell脚本求助

#10

帖子 zcf115 » 2013-05-05 23:34

主要是想试下数组和字符串删除的功能。

Sent from my Lenovo A710e using Tapatalk 2
Still Alive
aerofox
帖子: 1453
注册时间: 2008-05-24 8:30
送出感谢: 2 次
接收感谢: 31 次

Re: shell脚本求助

#11

帖子 aerofox » 2013-05-06 6:17

zcf115 写了:主要是想试下数组和字符串删除的功能。

代码: 全选

mp3s=( *.mp3 )
for mp3 in "${mp3s[@]}";do
   echo "${mp3/.*}"
done
回复

回到 “Shell脚本”