0

我正在尝试制作一个 shell 脚本,该脚本使为 qemu-launcher 制作配置文件(我尝试过的 4 个中唯一对我有用的 qemu GUI)是一步过程,但无法弄清楚如何传递命令行“触摸”命令的参数。

我的控制台输入是config hello.iso.

到目前为止,我的脚本是:

#!/bin/sh

touch $1

这不会创建文件。我尝试制作一个等于 的变量$1,然后使用它,但我仍然没有得到任何响应。我试过$1双引号和单引号;使用 double 我什么也得不到,而使用 single 结果文件名是1.

但是,如果我传递 just 的参数hello,则会创建具有该名称的文件,但我需要扩展名才能与其他东西一起使用。

难道不能这样做吗?还是我只是不明白?

我真正想要做的是获取参数并.iso从中删除,然后将其用作文件名,但我很确定我可以使用 grep 肯定前瞻来做到这一点。

4

2 回答 2

0

如果您使用 bash 而不是 sh:

#! /bin/bash

myVar=$1
touch ${myVar%.iso}

将完成这项工作。'%' 后面的字符串从变量内容的末尾被剥离。要获取有关当前脚本版本的更多信息,请尝试以下操作:

  • 重命名您的脚本 - 不要使用“配置”
  • 通过“回声”改变“触摸”
  • 将脚本的输出重定向到文件
  • 查看输出的内容

    od -a myOutputOfTheScript

或...调用你的脚本

bash -x myScript hello.iso > 输出.txt

于 2013-07-25T06:28:23.537 回答
0

您所拥有的(带有双引号的变体)是正确的。更改为/bin/bash不会解决此问题,因为 bash 和 sh 对于此语法完全重叠:

#!/bin/sh

touch "$1"

需要检查/尝试的一些事情:

  1. 确保您已打开执行权限chmod +x config
  2. 确保您像在它所./config hello.iso在的目录中一样运行它,或者使用它的完整路径名(仅作为示例),/home/your-username/bin/config hello.iso具体取决于您放置脚本的位置。
  3. 尝试在脚本set -x的行上方添加一个touch "$1"以查看调试跟踪。
  4. 在少数 shell 实现(尤其是 csh)中,如果脚本末尾没有换行符,则将跳过脚本的最后一行。我通常只是添加一个评论,比如#---eof。这在大多数现代 shell 中不太可能成为问题。

config您的路径中可能已经调用了一个系统命令。跑去type config检查。我建议为脚本选择一个更具体的名称,以降低这种碰撞的几率。

如果您有一个工作脚本(可能有一个更好的名称),通常会将其放在bin您的主目录中命名的目录中,然后确保该目录的名称在您的PATH环境变量中。检查env,向 PATH 添加缺少的目录因 shell 和口味而异,~/.bashrc是最常见的地方(尽管在技术上有限),并且~/.bash_login, ~/.bash_profile, 或~/.profile对于新用户来说通常更好但更棘手。在所有这些中,~指的是您的主目录。

一个典型的路径:

$ env | grep PATH
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

脚本编写者通常喜欢的内容(假设此处命名为scripter):

$ env | grep PATH
PATH=/home/scripter/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

该用户会将您的config脚本放入/home/scripter/bin/config- 但选择了不同的名称 ;-)

于 2013-07-25T07:36:14.657 回答