标签: shell

一个如何在bash中使用getopts的例子

我想以myscript这种方式调用文件:

$ ./myscript -s 45 -p any_string
Run Code Online (Sandbox Code Playgroud)

要么

$ ./myscript -h  #should display help
$ ./myscript     #should display help
Run Code Online (Sandbox Code Playgroud)

我的要求是:

  • getopt 这里得到输入参数
  • 检查是否-s存在,如果没有返回错误
  • 检查之后的值-s是45还是90
  • 检查是否-p存在并且之后有输入字符串
  • 如果用户输入./myscript -h或只是./myscript显示帮助

我到目前为止尝试了这段代码:

#!/bin/bash
while getopts "h:s:" arg; do
  case $arg in
    h)
      echo "usage" 
      ;;
    s)
      strength=$OPTARG
      echo $strength
      ;;
  esac
done
Run Code Online (Sandbox Code Playgroud)

但是使用该代码我会收到错误.怎么用Bash和getopt

bash shell getopts

310
推荐指数
7
解决办法
44万
查看次数

`find -name`模式匹配多个模式

我试图用命令获取目录中所有python和html文件的列表find Documents -name "*.{py,html}".

然后是手册页:

模式('{}')中的大括号不被认为是特殊的(即,find.-name'foo {1,2}'匹配名为foo {1,2}的文件,而不是文件foo1和foo2.

由于这是管道链的一部分,我希望能够在运行时指定它匹配的扩展名(没有硬编码).如果找不到它,perl单行(或类似)就可以了.

编辑:我最终提出的答案包括各种各样的废话,并且有点长,所以我发布它作为我试图划伤的原始痒的答案.如果你有更好的解决方案,请随意破解.

shell find

308
推荐指数
5
解决办法
34万
查看次数

Linux:如果不存在,则复制并创建目标目录

我想要一个命令(或者可能是cp的一个选项),如果它不存在,则创建目标目录.

例:

cp -? file /path/to/copy/file/to/is/very/deep/there
Run Code Online (Sandbox Code Playgroud)

unix linux bash shell cp

306
推荐指数
14
解决办法
27万
查看次数

如何为多行命令添加行注释

我知道如何在Bash脚本中编写多行命令,但是如何在多行命令中为每一行添加注释?

CommandName InputFiles      \ # This is the comment for the 1st line
            --option1 arg1  \ # This is the comment for the 2nd line
            --option2 arg2    # This is the comment for the 3nd line
Run Code Online (Sandbox Code Playgroud)

但不幸的是,继续角色之后的评论\将打破命令.

bash shell comments

303
推荐指数
4
解决办法
6万
查看次数

如何为curl命令urlencode数据?

我正在尝试编写一个用于测试的bash脚本,它接受一个参数并通过curl将其发送到网站.我需要对值进行url编码,以确保正确处理特殊字符.做这个的最好方式是什么?

这是我到目前为止的基本脚本:

#!/bin/bash
host=${1:?'bad host'}
value=$2
shift
shift
curl -v -d "param=${value}" http://${host}/somepath $@
Run Code Online (Sandbox Code Playgroud)

bash shell scripting curl urlencode

300
推荐指数
26
解决办法
30万
查看次数

在Linux中更改默认shell

如何更改默认shell?该env命令目前说:

SHELL=/bin/tcsh
Run Code Online (Sandbox Code Playgroud)

我想把它改成Bash.

linux bash shell environment tcsh

300
推荐指数
3
解决办法
51万
查看次数

如何检查是否在Cygwin,Mac或Linux中运行?

我有一个shell脚本,可以在Windows/Cygwin,Mac和Linux上使用.每个版本需要稍微不同的变量.

shell/bash脚本如何检测它是在Cygwin,Mac或Linux上运行?

bash shell cygwin cross-platform

297
推荐指数
7
解决办法
13万
查看次数

使用Sed替换包含字符串的整行

我有一个文本文件,其中有一个特定的行

sometext sometext sometext TEXT_TO_BE_REPLACED sometext sometext sometext
Run Code Online (Sandbox Code Playgroud)

我需要替换上面的整行

This line is removed by the admin.
Run Code Online (Sandbox Code Playgroud)

搜索关键字是 TEXT_TO_BE_REPLACED

我需要为此编写一个shell脚本.我怎样才能实现这个目的sed

string shell sed

296
推荐指数
5
解决办法
47万
查看次数

如何创建指向目录的链接

如何创建一个链接xxx/home/jake/doc/test/2000/something/

假设它xxx是在/home/jake你当前所在的位置创建的/home/jake.当你这样做cd xxx,你直接去/home/jake/doc/test/2000/something/.

linux shell command

289
推荐指数
2
解决办法
54万
查看次数

如何在shell if语句中表示多个条件?

我想代表这样的多个条件:

if [ ( $g -eq 1 -a "$c" = "123" ) -o ( $g -eq 2 -a "$c" = "456" ) ]   
then  
    echo abc;  
else  
    echo efg;   
fi  
Run Code Online (Sandbox Code Playgroud)

但是当我执行脚本时,它会显示出来

syntax error at line 15: `[' unexpected, 
Run Code Online (Sandbox Code Playgroud)

第15行显示是否....

这种情况怎么了?我猜这有点不对劲().

unix bash shell

288
推荐指数
6
解决办法
77万
查看次数

标签 统计

shell ×10

bash ×7

linux ×3

unix ×2

command ×1

comments ×1

cp ×1

cross-platform ×1

curl ×1

cygwin ×1

environment ×1

find ×1

getopts ×1

scripting ×1

sed ×1

string ×1

tcsh ×1

urlencode ×1