接受命令的脚本

时间:2009-11-21 03:06:27

标签: linux shell

#!/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”

文件夹媒体包含所有媒体文件。

谢谢!

5 个答案:

答案 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