Dev*_*ith 5 string shell-script
我有一个存储字符串的变量,即 sed 命令的输出。仅当此字符串值与其他 2 个字符串中的任何一个匹配时,我才想执行一组命令。
我使用了下面的代码。
#! /bin/ksh
request=”Request”
fault=”Fault”
while read lines; do
category=`echo $lines|sed -n -e 's/.*Summary: Value//p'| awk '{print $1}'`
if [ ! -z "$category" ]
then
if($category = $request)
then
echo $category
fi
fi
done<content.txt
Run Code Online (Sandbox Code Playgroud)
但它给了我一个错误:
sample.sh: Request: not found
Run Code Online (Sandbox Code Playgroud)
变量类别将具有值Request或值Order
有人可以指出错误或解决方案吗?
如果消除内部 ifecho $category并将打印确切的字符串值。
Kiw*_*iwy 14
这样做的简单答案您可以使用以下语法:
if [ "$category" = "$request" ]
Run Code Online (Sandbox Code Playgroud)
间距很重要。旁注,您应该使用最近的命令替换和替换方式(请参阅文章 1和posix 文章):
category=`echo $lines|sed -n -e 's/.*Summary: value//p'| awk '{print $1}'`
Run Code Online (Sandbox Code Playgroud)
这样
category=$(echo $lines|sed -n -e 's/.*Summary: value//p'| awk '{print $1}')
Run Code Online (Sandbox Code Playgroud)
Kus*_*nda 11
其他人已经指出了您if语句中的语法错误。
我还想评论一个事实,即您似乎使用印刷双引号,”,而不是普通的,"。您也不需要sed通过该命令替换将 的输出存储在单独的变量中。相反,awk直接从输出中读取:
#!/bin/ksh
sed -n 's/.*Summary: Value//p' <content.txt | awk '{ print $1 }' |
while IFS= read -r category; do
case $category in
Request|Fault)
printf '%s\n' "$category"
;;
Breakfast)
echo 'Yum'
;;
*)
printf 'Unknown category: %s\n' "$category"
esac
done
Run Code Online (Sandbox Code Playgroud)
或者,如果您更喜欢使用if-statements,
#!/bin/ksh
sed -n 's/.*Summary: Value//p' <content.txt | awk '{ print $1 }' |
while IFS= read -r category; do
if [ "$category" = 'Request' ] || [ "$category" = 'Fault' ]; then
printf '%s\n' "$category"
elif [ "$category" = 'Breakfast' ]; then
echo 'Yum'
else
printf 'Unknown category: %s\n' "$category"
fi
done
Run Code Online (Sandbox Code Playgroud)
请注意,不需要测试字符串是否为空。只要您始终引用变量 expand,就可以将空字符串与另一个字符串进行比较而不会出现问题。
或者,如果您的脚本除此之外什么都不做:
#!/bin/ksh
sed -n 's/.*Summary: Value//p' <content.txt | awk '
$1 == "Request" || $1 == "Fault" { print $1; next }
$1 == "Breakfast" { print "Yum"; next }
{ printf("Unknown category: %s\n", $1) }
Run Code Online (Sandbox Code Playgroud)
有关的:
我们应该使用[代替(in if 条件
尝试:
if [ "$category" = "$request" ]
Run Code Online (Sandbox Code Playgroud)
() 用于执行命令并检查退出代码。[] 用于检查表达式。我希望你已经从 MS-word 复制了脚本,因为它具有非 unix 字符 ”
request=”Request”
fault=”Fault”
Run Code Online (Sandbox Code Playgroud)
将此编辑为
request="Request"
fault="Fault"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
18977 次 |
| 最近记录: |