- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有两个问题。让我们先讨论更简单的一个,然后再讨论 case 语句。考虑这个简单的 if else
if fgrep -q '= ' sf
then
echo "blanks in file"
else
echo "no blanks"
fi
[[ `fgrep -q '= ' sf` ]] && echo "blanks there"
# rc=$?
# echo "rc is $rc"
if 条件就像一个魅力。我正在尝试使用 [[
测试条件重写相同的内容,但它并不完全有效。我的测试条件有什么问题。
现在是第二个问题
实际上这就是我想要做的。
我有这种案例陈述
source "/path"
# die is a function that will output standard error and return 1
opta=false
optb=false
while getopts ":abf:" opt; do
case $opt in
a ) $optb && die "Cannot specify option a after specifying option b"
opta=true
;;
b ) $opta && die "Cannot specify option b after specifying option a"
optb=true
;;
f) # Pl see the note below for f
\?) die "Invalid option: -$OPTARG. Abort"
;;
esac
done
shift $(($OPTIND - 1))
test $# -eq 0 && die "You must supply SID"
test $# -eq 1 || die "Too many command-line arguments"
SID=$1
f 是一个文件选项。因此,如果使用 -f,则前两个不兼容。
myshell -f /path/file1 -a 500
以上是不允许的。我可以管理这部分所以不要太担心
这就是让我偏离道路的障碍。-f 接受文件路径。该文件是一个手动覆盖文件,其中包含各种参数,这些参数将覆盖使用 source 命令设置的参数。因此,当谈到 f 选项时,它应该执行以下操作检查是否
文件路径有效
如果有效,检查是否有“=”即。等于后跟空白 - 然后退出。换句话说,我不想要空白值 ||那些^空白的
3
如果满足这两个条件,则如果在文件中设置了搜索字符串 s 参数,则不能将任何位置参数传递给命令。
例如下面的手动覆盖文件
p1=v1
p2=v2
s=v3
p3=
# some parameters like p3 need to be set in that case it will take the defaults from the source file if those aren't set
换句话说,例如下面的命令
myshell.ksh -f/path/file1 500
如果 s 的值未在 file1 中设置则有效,否则它应该退出并给出一个错误,即当覆盖值已在文件 -f file1 中应用时提供了位置参数
4将 file1 中设置的所有参数导出为对源文件参数的覆盖。例如源文件有
p1=sv1
然后在文件 1 中设置 p1 然后从文件 1 中导出 p1=v1
我可以管理#4。我最多只需要了解 3 美元。 2,1 和 4 不会造成伤害
最佳答案
[[...]]
在那里没有任何业务。使用:
fgrep -q '= ' sf && echo "blanks there"
上面的代码在 sf
上运行了 fgrep
。如果 fgrep
指示成功,则运行 echo 命令。
如果/path/file1
包含s
变量的设置并且命令行上有位置参数,那么我们应该报告错误:
grep '^s=' /path/file1 && [ "$#" -gt 0 ] && echo "ERROR: file has s parameter set and there are positional arguments"
上面检查两个条件是否为真,如果它们都为真,它会打印一条错误消息。第一个条件是:
grep '^s=' /path/file1
如果文件 /path/file1
有一行以字符 s=
开头,则为真。 (^
表示一行的开始。)第二个条件是:
[ "$#" -gt 0 ]
如果位置参数的数量大于零,则返回真。如果这两个条件都为真,则执行上面的 echo
语句。
在这种情况下,我们假设变量$filepath
有文件的路径和名称,比如/path/file1
,里面包含了用于设置的shell命令变量。以下检查该文件是否可读。如果是,那么它将获取该文件中的所有命令。下一行检查是否设置了 s
。如果它有并且仍然有位置参数,那么它会打印一条消息:
[ -r "$filepath" ] && source "$filepath" # Set all override variables
[ -n "$s" ] && [ "$#" -gt 0 ] && echo "message"
在测试 ([...]
) 语句中,请注意 $filepath
和 $s
包含在双引号中。这可以防止任何一个值都为空时出现错误。如果 filepath
的值包含空格,它还可以防止错误。
要获取一个文件,它不仅需要存在,还需要可读。因此,上面的第一个测试检查可读性 (-r
) 而不是仅仅存在 (-f
)。
检查源文件是否有任何变量设置为空值的未注释行:
grep -qE '^[^#]+=$' file1 && echo "message"
上面的^
匹配一行的开头。
正则表达式起作用是因为 [^#]
匹配任何不是井号的字符。由于加号表示一个或多个前面的字符,因此 [^#]+
表示一个或多个字符的字符串,其中没有一个是井号。在方括号之外,^
匹配一行的开头。因此,^[^#]+
匹配从行首开始的任何非散列字符字符串。 ^[^#]+=
如果这些字符后跟等号则匹配。由于 $
匹配一行的结尾,那么 ^[^#]+=$
如果该行以一个或多个非散列字符开头,后跟一个等号,则匹配符号,后面什么也没有(行尾)。因此,如果某个变量的值设置为空,它就会匹配。
关于shell - shell 中的方括号(测试条件)内容和高级案例陈述,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21873888/
这个问题在这里已经有了答案: Oracle: merging two different queries into one, LIKE & IN (1 个回答) 8年前关闭。 我有以下代码: case
我查阅过此页面:http://dev.mysql.com/doc/refman/5.1/en/case.html以及这个,但无法获得一个简单的程序来工作...... 更新:为了明确我想要做什么:我想从
有什么办法可以优化下面的查询吗? SELECT DATE_FORMAT(a.duedate,'%d-%b-%y') AS dte, duedate, SUM(CASE WHEN (typeofnoti
我进退两难,以下 SQL 查询的结果是什么以及它是如何工作的: SELECT ... CASE WHEN (a.FIELD=1 AND b.FIELD=2) THEN 1 WHEN
问题:输入年,月,打印对应年月的日历。 示例: 问题分析: 1,首先1970年是Unix系统诞生的时间,1970年成为Unix的元年,1970年1月1号是星期四,现在大多的手机的日历功能只能显
**摘要:**介绍了Angular中依赖注入是如何查找依赖,如何配置提供商,如何用限定和过滤作用的装饰器拿到想要的实例,进一步通过N个案例分析如何结合依赖注入的知识点来解决开发编程中会遇到的问题。 本
我想拥有自动伴侣类apply case 类的构造函数来为我执行隐式转换,但无法弄清楚如何这样做。我到处搜索,我能找到的最接近的答案是 this问题(我将解释为什么它不是我在下面寻找的)。 我有一个看起
您好,我已经浏览了“多列案例”问题,但没有看到与此相同的内容,所以我想我应该问一下。 基本上我有两个我想要连接的表(都是子查询的结果)。它们具有相同的列名称。如果我加入他们的 ID 和 SELECT
我发现了一些类型推断的非直觉行为。因此,语义等效代码的工作方式不同,具体取决于编译器推断出的有关函数返回类型的信息。当您在最小单元测试中重现此案例时,或多或少会清楚发生了什么。但我担心在编写框架代码时
CREATE TABLE test ( sts_id int , [status1] int , [status2] int , [status3] int , [status4] int ) INS
我有以下声明: SELECT Dag AS Dag, CASE Jaar WHEN 2013 THEN Levering END AS '2013', CASE
我想做的是为所有高于平均时间、平均时间和低于平均时间的游乐设施获取平均tip_portion。所以返回3行。当我运行它时,它显示: ERROR: missing FROM-clause entry
我正在尝试设置一个包含以下字段的报告: 非常需要报告来显示日期、该日期内的总记录(因此我按日期分组),然后按小时计算 12 小时工作日(从上午 8 点到晚上 8 点)我需要计算记录在这些时间内出现的时
我有这个查询 SELECT users.name FROM users LEFT JOIN weapon_stats ON users.id = weapon_stats.zp_id WHERE we
我正在尝试按收视率等级获取不同视频的计数。我有下表: vid_id views 1 6 1 10 1 900 2 850 2 125000
假设我有一个如下所示的 SQL 语句: select supplier, case when platform in (5,6) then 'mobile' when p
我有一个表测试 TestNumber (int primary key) InactiveBitwise (int) 我执行以下命令: UPDATE tests SET CASE WH
我有一个像这样的表(name=expense): id amount date 1 -1687 2014-01-02 00:00:00.0 2 11000 2014-01-02 0
我有一个 multimap 定义 typedef std::pair au_pair; //vertices typedef std::pair acq_pair; //ch qlty specifi
我有一个有点像枚举的类,它的每个实例都有一个唯一的 int 值,该值从 0 开始并在每个新实例时递增。 class MyEnumLikeClass { static int NextId =
我是一名优秀的程序员,十分优秀!