#!/bin/sh
#My script
echo "Are you sure you want to reorganize your files?"
echo "Type y or Y to continue. Anything else will stop the process"
read response
if [ "$response" = "y" ] || [ "$response" = "Y" ]; then
mkdir video
mkdir audio
mkdir text
mv -v *.txt text >> log.txt
mv -v *.wmv video >> log.txt
mv -v *.mov video >> log.txt
mv -v *.mpg video >> log.txt
mv -v *.mp3 audio >> log.txt
mv -v *.wma audio >> log.txt
echo "Yay, it worked!"
else
echo "Nothing happened."
fi
我编写了上面的脚本来将文件组织到子文件夹中。例如,音乐文件将进入音频文件夹。现在我想更进一步,使它更全局化。我想允许脚本接受命令行参数,该参数是包含未组织文件的文件夹。这应该允许从文件系统中的任何位置定位和运行脚本,并接受任何未组织文件的文件夹。
示例:
organizfiles.sh mystuff / media //子文件夹将进入“media”
文件夹媒体包含所有媒体文件。
谢谢!
答案 0 :(得分:1)
您可以将命令行参数称为$ 1,$ 2等。第一个是$ 1。以下是如何将参数传递给脚本的详细说明:http://docsrv.sco.com:507/en/OSUserG/_Passing_to_shell_script.html
答案 1 :(得分:1)
脚本可以通过以下某些变量访问命令行中的参数:
$1, $2, ..., $n - refers to first, second up to n arguments.
示例:键入myscript.sh foo会将foo设置为$ 1变量。
答案 2 :(得分:1)
使用$#
格式,Bash参数相当简单。例如,您可以使用$1
在你的脚本中,你可以这样做:
if [ -z $1 ]
then
dir = $1
else
dir = './'
fi
然后只需将新$dir
变量添加到mv
命令中的路径即可。我建议从IBM查看Bash By Example。一个伟大的文章系列,教你Bash。
请注意,可能有一个更好的方法来做我建议的事情,但我远远不是Bash的专家。 : - )
答案 3 :(得分:1)
您脚本的一部分可以使用第一个位置参数,如下所示:
if [ -d $1 ]
then
mkdir video
mkdir audio
mkdir text
mv -v $1/*.txt text >> log.txt
mv -v $1/*.wmv video >> log.txt
mv -v $1/*.mov video >> log.txt
mv -v $1/*.mpg video >> log.txt
mv -v $1/*.mp3 audio >> log.txt
mv -v $1/*.wma audio >> log.txt
else
echo "The destination directory does not exist"
exit 1
fi
答案 4 :(得分:1)
这是一个简单的系统。你可以使用case / esac代替if / else来保持整洁。另外,重新安排了mv命令
#!/bin/bash
dir=$1
cd $dir
while true
do
echo "Are you sure you want to reorganize your files?"
printf "Type y or Y to continue. Anything else will stop the process: "
read response
case "$response" in
y|Y )
mv -v *.txt text >> log.txt
for vid in "*.mov" "*.wmv" "*.mpg" "*.wma"
do
mv $vid video >> log.txt
done
echo "yay"
break;;
*) echo "Invalid choice";;
esac
done