我正在尝试制作一个shell脚本,它为qemu-launcher制作了一个配置文件(我尝试过的4个唯一的qemu GUI,对我来说很有用)一步一步,但无法弄清楚如何通过“touch”命令的命令行参数。
我的控制台输入为config hello.iso
。
到目前为止我的脚本是:
#!/bin/sh
touch $1
哪个不会创建文件。我已经尝试制作一个等于$1
的变量,然后使用它,但我仍然没有得到回应。我在双引号和单引号中都试过$1
;使用double我什么也得不到,单个生成的文件名为1
。
但是,如果我传递了只有hello
的参数,那么会创建具有该名称的文件,但我需要扩展名以用于其他内容。
不可能这样做吗?或者我只是不理解它?
我真正想做的是接受参数并从中移除.iso
,然后将其用作文件名,但我很确定我可以使用grep正向前瞻来做。
答案 0 :(得分:0)
如果你使用bash而不是sh:
#! /bin/bash
myVar=$1
touch ${myVar%.iso}
将完成这项工作。 '%'后面的字符串从变量内容的末尾被删除。 要获取有关当前脚本版本的更多信息,请尝试以下操作:
使用
查看输出内容od -a myOutputOfTheScript
或...... 用
调用你的脚本bash -x myScript hello.iso> ouput.txt
答案 1 :(得分:0)
你所拥有的(带双引号的变体)是正确的。更改为/bin/bash
无法解决此问题,因为bash和sh完全重叠此语法:
#!/bin/sh
touch "$1"
要检查/尝试的一些事情:
chmod +x config
./config hello.iso
运行,或者使用其完整路径名,否则(仅限示例)/home/your-username/bin/config hello.iso
,具体取决于您放置脚本的位置。set -x
行上方添加touch "$1"
以查看调试跟踪。#---eof
之类的评论。在大多数现代炮弹中,这不太可能成为问题。您的路径中可能已有一个名为config
的系统命令。运行type config
进行检查。我建议为脚本选择一个更具体的名称来降低这种碰撞的几率。
您有一个工作脚本(可能名称更好),通常将其放在主目录中名为bin
的目录中,然后确保该目录的名称位于PATH
环境中变量。检查env
,向PATH添加缺少的目录因shell和品味而异,~/.bashrc
是最常见的地方(虽然技术上有限),~/.bash_login
,~/.bash_profile
或{对于新用户来说,{1}}通常更好但更棘手。在所有这些中,~/.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
中 - 但选择了不同的名称; - )