标签: parameter

Getopts 选项处理,是否可以添加非连字符 [FILE]?

我正在使用getopts所有需要高级选项解析的脚本,并且它与dash. 我熟悉标准的基本getopts用法,包括[-x][-x OPTION]

是否可以解析这样的选项?

 dash_script.sh FILE -x -z -o OPTION
 ## Or the inverse?
 dash_script.sh -x -z -o OPTION FILE
Run Code Online (Sandbox Code Playgroud)

shell options dash parameter getopts

6
推荐指数
1
解决办法
5785
查看次数

为什么 $# 在我的函数中总是 0?

Bash 快把我逼疯了。我无法弄清楚为什么以下内容(也不是我从示例中逐字复制和粘贴的数十种变体中的任何一种)都无法正常工作:

#!/bin/bash

echo $#

function main {
    if (( $# < 1 )); then
        usage
    fi

    echo "good"
}

function usage {
    echo "Usage: $0 <outputdir>"
    exit 1
}

main
Run Code Online (Sandbox Code Playgroud)

由于某种原因,参数检查每次都失败,即使我传递了一个参数并且可以清楚地看到$#按预期设置。

shell bash parameter

6
推荐指数
2
解决办法
4797
查看次数

如何在bash中将文件内容作为多个参数传递

我有一个文件,其中包含随时间更新的数据 (mydata)。该文件如下所示:

1 2 3
Run Code Online (Sandbox Code Playgroud)

有了这个文件,我想这样做(基本上将每个数字作为单独的参数处理):

myscript.sh 1 2 3
Run Code Online (Sandbox Code Playgroud)

由于数据不是静态的而是随着时间的推移更新,我想运行这个命令:

myscript.sh "$(cat mydata)"
Run Code Online (Sandbox Code Playgroud)

但是我看到 ./myscript.sh: line 1: 1: command not found

我该怎么办?

bash parameter shell-script

6
推荐指数
2
解决办法
1万
查看次数

在shell脚本中将输入字符串转换为日期

我的shell脚本:

#!/bin/bash
echo "$1";
startd=$(date -d "$1" +"%Y%m%d"); 
echo "$startd";
Run Code Online (Sandbox Code Playgroud)

我的命令:

须藤 ./test.sh "20151010"

输出:

20151010 
20150213
Run Code Online (Sandbox Code Playgroud)

它打印今天的日期而不是打印输入日期有什么想法吗?

osx bash parameter shell-script macintosh

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

如何在不防止空字符串删除的情况下防止分词?

我需要将参数扩展作为程序参数传递。扩展导致文件名带有空格。因此,我用双引号将文件名作为一个单词:"$var".

只要$var包含文件名,程序就会得到一个单字参数并且它工作正常。但是,有时扩展会导致空字符串,当作为参数传递时,会破坏程序(我无法更改)。

根据 Bash 参考手册,不删除空字符串是指定的行为:

如果没有值的参数在双引号内展开,则结果为空参数并保留。

但是,我如何管理需要引用变量但也需要丢弃空字符串扩展的情况?

编辑:

感谢 George Vasiliou,我发现我的问题中缺少一个细节(只是尽量保持简短:))。运行程序是一个很长的java调用,缩写如下:

java -cp /etc/etc MyClass param1 param2 "$var" param4
Run Code Online (Sandbox Code Playgroud)

事实上,使用if乔治所描述的语句就可以解决问题。但是它需要一个在then子句中带有“$var”的调用,另一个在子句中没有“$var” else

为了避免重复,我想看看是否有一种方法可以使用单个调用来丢弃“$var”为空时的扩展。

bash parameter null

6
推荐指数
2
解决办法
1965
查看次数

awk 中 $1、${1} 和 $"1" 之间的区别

在处理脚本时,以下脚本出错

file * | awk '{ ${1}=""; print substr(${0},2) }';
Run Code Online (Sandbox Code Playgroud)

虽然以下两个脚本都成功运行

file * | awk '{ $"1"=""; print substr($"0",2) }';
Run Code Online (Sandbox Code Playgroud)

file * | awk '{ $1=""; print substr($0,2) }';
Run Code Online (Sandbox Code Playgroud)

$1, ${1}, $"1"都是参数替换吗?我的awk语法有问题吗?

parameter awk

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

列出目录中每个基本名称的最可靠方法,按修改日期排序?

给定一个包含以下内容的目录:

  • note 1.txt, 昨天最后修改
  • note 2.txt,上次修改前天
  • note 3.txt,今天最后修改

获取数组的最佳方法是什么note 3 note 1 note 2

为了定义“最佳”,我更关心稳健性(在 macOS 中的 ZSH 上下文中),而不是效率和可移植性。

预期的用例是一个包含数百或数千个纯文本文件的目录,但是——冒着混淆问题的风险——这是我有一个更普遍的问题的一个特定案例,在文件路径上执行字符串操作的最佳实践是什么由命令打印喜欢lsfind,和mdfind


我一直在使用一个调用此命令的宏来实现上述目的:

ls -t | sed -e 's/.[^.]*$//'
Run Code Online (Sandbox Code Playgroud)

它从来没有失败过,但是:

  • Greg 的 Wiki强烈建议不要解析ls. (解析ls实践,在“5. 永远不要做这些”下)。
  • sed在参数扩展会做的地方调用效率低下吗?

使用find(用 NUL 字符而不是换行符安全地分隔文件路径)和参数扩展来提取基本名称,这会产生一个未排序的列表:

find . -type f -print0 | while IFS= read -d '' -r l ; do print "${${l%.*}##*/}" ; done
Run Code Online (Sandbox Code Playgroud)

但是按修改日期排序似乎需要调用stat …

zsh parameter string

6
推荐指数
1
解决办法
377
查看次数

如何创建名称以破折号开头的空文件?

我们如何创建一个 unix name 的空文件-stuff。这意味着名称以-. 我试过了,touch -stuff但没有用。

command-line options parameter

5
推荐指数
2
解决办法
732
查看次数

以标准 man 格式编写命令概要

我正在编写脚本并在usage()函数中指定用法。我的脚本使用 option1 或 option2 或两者。其中之一是强制性的。

有没有标准的写法?

documentation parameter shell-script

5
推荐指数
1
解决办法
905
查看次数

用户自定义 sysctl 参数

我知道有*.conf文件/usr/lib/sysctl.d和/或/etc/sysctl.d文件夹准备在启动时建立内核参数。但它们是通用的;我想要的是net.ipv4.icmp_echo_ignore_all根据所在的用户自定义其中一些参数(例如,),但我想要每个用户的内核参数。有可能吗,或者我所说的完全是愚蠢的?

kernel parameter sysctl

5
推荐指数
1
解决办法
400
查看次数