红联Linux门户
Linux帮助

linux shell 脚本中怎样将字符串转化为命令

发布时间:2010-08-21 10:13:42来源:红联作者:renzhe19880626
如在脚本中:
read my_command
my_command #执行这条命令

如在终端输入 cd /home
便可以执行cd /home
文章评论

共有 12 条评论

  1. t_1806 于 2010-08-31 19:05:02发表:

    这样肯定不行啊

  2. lyanxia28 于 2010-08-24 10:19:36发表:

    顶!

  3. lyanxia28 于 2010-08-24 10:19:34发表:

    顶!

  4. shenhao0129 于 2010-08-21 17:28:35发表:

    看了后面的回复,总算是明白LZ想说的是什么意思了

  5. zdl_361 于 2010-08-21 15:23:29发表:

    [i=s] 本帖最后由 zdl_361 于 2010-8-22 23:17 编辑 [/i]

    由于bash shell按照以下顺序分析命令行字符串:
    1 $()输出展开
    2 变量替换
    3 然后参数分割
    最后执行命令,传递参数所以
    如果变量
    CM='ls -a'
    然后你在命令行内执行
    $CM
    shell分4步解释
    第0 没有$()命令,无操作.
    第一 变量展开成字符串"ls -a -l"
    第二 按照空白分割成三个部分 ls 和 -a 和-l
    第三 以第一个部分为命令名开始调用命令(也就是ls), 并且把-a作为命令的第一个参数传入 -l作为命令第二个参数传入
    shell调用命令的过程其实就是在PATH里面搜索程序名称。第一个找到就执行,其他目录就忽略。
    当然新的bash内部有hash功能,将程序的绝对地址记录在一张表里面。
    以上方式在zsh中会失败。因为zsh按照以下顺序执行
    1 $()输出展开
    2 然后参数分割
    3 变量替换
    最后执行命令,传递参数所以
    可以做如下实验。
    bash:
    $ CM='echo hello'
    $ $CM
    hello
    zsh:
    $ CM='echo hello'
    $ $CM
    zsh: command not found: 'echo hello'
    $ #也就是说zsh在PATH目录里面搜索名为'echo hello'的命令,但其实你是想让它搜索echo.,参数分析过程和通常见到的不一样。
    -----------
    使用eval结果始终是正确的.
    这使得脚本比较通用。

  6. yanlong938 于 2010-08-21 14:39:38发表:

    不太明白什么意思阿

  7. alick 于 2010-08-21 14:12:01发表:

    bash的eval可以用来干这个:
    如:
    str="echo hello"
    eval $str
    结果就是
    hello

  8. 相思爱文 于 2010-08-21 13:42:24发表:

    [i=s] 本帖最后由 相思爱文 于 2010-8-21 13:46 编辑 [/i]

    试试这个脚本
    #!/bin/bash
    read my
    $my


    注意下,如果运行cd /home,那么只有在脚本运行中进入/home目录。
    可以用
    #!/bin/bash
    read my
    $my
    read my
    $my
    第一次输入cd /home 第二次输入pwd检验。

  9. 相思爱文 于 2010-08-21 13:37:48发表:

    刚才由于网络原因,有很多重复回帖。
    我可能有误删除的回帖,很抱歉。

  10. renzhe19880626 于 2010-08-21 12:57:25发表:

    这样做不可以,假如真的需要在使用脚本的时候让使用者自己输入需要脚本执行的命令,只能用选择语句或者判断语句来匹配使用者的输入。因为使用者在使用脚本时输入给脚本的“命令”从根本上讲并不是命令,对脚本而言它仅仅是一个执行过程中的“选项”。好比“(1)删除(2)增加(3)退出... 请输入选项:”这种最平常的方式,拓展开也就是把提示去掉变成“请输入命令:”,而在使用者输入之后脚本用 if 删除==输入字符串 then 。。。这样的方式来满足需求。

    别人的回答!!

  11. outsiders 于 2010-08-21 10:46:44发表:

  12. zmj27404 于 2010-08-21 10:41:58发表:

    这个还不会。