DOS命令到Bash命令的转换

DOS命令到Bash命令的转换

我需要让 Bash 接受带有参数的 DOS 命令,然后将主命令转换为 Bash 命令,并且如果有任何参数,仍然使用参数。

我迷失的部分是如何将参数传递给个别案例,而不是被 *) Command Not Found 所困扰!

例如用户输入:

copy file1.txt file2.txt

用例:copy然后应该运行 Linuxcp命令并使用传递副本的两个参数来完成命令。

#!/bin/bash

while :
do
read INPUT_STRING
case $INPUT_STRING in
        chdir|CHDIR)
        cd $arg1
        bash myscript.sh
;;
        cls|CLS)
        clear
        bash myscript.sh
;;
        copy|COPY)
        cp $arg1 $arg2
        bash myscript.sh
;;
        createdir|CREATEDIR)
        mkdir $arg1
        bash myscript.sh
;;
        delete|DELETE)
        rm $arg1
        bash myscript.sh
;;
        dir|DIR)
        ls
        bash myscript.sh
;;
        move|MOVE)
        mv $arg1 $arg2
        bash myscript.sh
;;
        print|PRINT)
        echo $arg1
        bash myscript.sh
;;
        quit|QUIT)
        break
        PS1="n01396736@cisvm-cop4640-2:~$ "
;;
        rename|RENAME)
        mv $arg1 $arg2
        bash myscript.sh
;;
        type|TYPE)
        cat $arg1
        bash myscript.sh
;;
        *)
        echo "Command Not Found!!"
        bash myscript.sh
;;
esac
break
done

答案1

感谢罗米亚和迈克尔·普罗科佩克为我指明了正确的方向。这就是我最终得到的结果,它的工作原理就像预期的那样。如果您发现任何错误或我可以改进代码,请告诉我。这是我创建的第一个 Linux 脚本。

#!/bin/bash

counter=1
while : [$counter -lt 2]
do
read -p 'Your Name Here > ' cmd "arg"

case $cmd in
chdir|CHDIR)
        cd $arg
        ;;
cls|CLS)
        clear
        ;;
copy|COPY)
        cp $arg
        ;;
createdir|CREATEDIR)
        mkdir $arg
        ;;
createfile|CREATEFILE)
        touch $arg
        ;;
delete|DELETE)
        rm $arg
        ;;
dir|DIR)
        ls
        ;;
move|MOVE)
        mv $arg
        ;;
print|PRINT)
        echo $arg
        ;;
quit|QUIT)
        counter=2
        ;;
rename|RENAME)
        mv $arg
        ;;
type|TYPE)
        cat $arg
        ;;
*)
        echo "Command Not Found!!"
        ;;
esac
done

答案2

您的脚本似乎只是用替代名称替换命令名称。通过在 shell 中提供别名可以轻松完成此操作。

例如:

alias remove=rm
alias type=cat
alias dir='ls -l'
alias cls=clear
alias quit=exit

您可以将它们放入一个名为类似的文件中dos_compat,然后bash使用以下命令启动交互式 shell

bash --rcfile dos_compat

这将启动一个具有可用别名的新交互式 shell。使用exitquitCtrl+D返回到原始 shell。

如果您想要实现的任何 DOS 命令比简单的别名更复杂,则需要将其实现为文件中的 shell 函数dos_compat。其用途之一可能是自动检测文件名参数中类似于 DOS 的路径名,并将其更改为C:\/或者重新排列更复杂的 DOS 命令的参数。

这样做的好处是,您仍然可以将 Unix shell 命令与 DOS 别名一起使用,并且如果您愿意,您还可以在更复杂的复合 shell 命令结构中使用 DOS 命令。

答案3

为什么不编写一个脚本,将这些 DOS 命令的别名添加到 .bashrc 中,并将这些命令映射到相应的 Bash 对应项。您还可以使用脚本轻松删除这些条目,这样您基本上就可以将 bash 环境从一台计算机迁移到另一台计算机。

您也可以这样做,以便它将原始的 .bashrc 移动到 .bashrcbak 并将您的文件放在适当的位置,然后当您想要恢复时,只需将其移回原来的位置即可。

或者您可以创建单个会话别名,如下所示:https://unix.stackexchange.com/a/148928/321418

相关内容