我有一個文本檔案:
org.jitsi.videobridge.xmpp.user.shard-1.HOSTNAME=localhost
org.jitsi.videobridge.xmpp.user.shard-1.DOMAIN=auth.jc.name.com
org.jitsi.videobridge.xmpp.user.shard-1.USERNAME=name
org.jitsi.videobridge.xmpp.user.shard-1.PASSWORD=Hfr*7462
org.jitsi.videobridge.xmpp.user.shard-1.MUC_JIDS=JvbBredjoy@internal.auth.jc.name.com
org.jitsi.videobridge.xmpp.user.shard-1.MUC_NICKNAME=7896aee5-fgre-4b02-4569-0bcc75ed1d0d
我創建了一個 bash 腳本:
#!/bin/bash
DPATH="/etc/jitsi/videobridge/sip-communicator.properties"
k=$(grep -o 'shard-1' $DPATH) # shard ends by a number#
i=$(grep -o 'shard-1' $DPATH | cut -c7)
m=$((i 1))
n="shard-$m"
sed -i "s|${k}|${n}|g" $DPATH
但我得到錯誤:
/home/scripts# ./shard_number
./shard_number: line 5: 1
1
1
1
1
1: syntax error in expression (error token is "1
1
1
1
1")
sed: -e expression #1, char 9: unterminated `s' command
你能幫忙解決這個問題嗎?謝謝你。
uj5u.com熱心網友回復:
如果您呼叫腳本bash -x /path/to/your/script或set -x在腳本開頭的某處添加(在 之后#!shebang,但在您要除錯的命令之前),您將看到您的grep命令回傳的不是單個“shard-1”而是一個“shard-”每行 1' :
grep -o shard-1 /etc/jitsi/videobridge/sip-communicator.properties
k='shard-1
shard-1
shard-1
shard-1
shard-1
shard-1'
一次cut,這將1\n1\n1\n1\n1\n錯誤輸出中提到的字串作為$(( ... ))運算式的無效標記,這也破壞了sed替換的語法:
cut -c7
grep -o shard-1 /etc/jitsi/videobridge/sip-communicator.properties
i='1
1
1
1
1
1'
將該字串設為單個數字(例如,將您grep輸入sort -u到統一化找到的所有分片),您的腳本將正常作業:
#!/bin/bash
DPATH="/etc/jitsi/videobridge/sip-communicator.properties"
k=$(grep -o 'shard-1' $DPATH | sort -u) # shard ends by a number#
i=$(grep -o 'shard-1' $DPATH | sort -u | cut -c7)
m=$((i 1))
n="shard-$m"
sed -i "s|${k}|${n}|g" $DPATH
你可以在這里試試。如果您想查看除錯的初始腳本,還請檢查此測驗。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/341784.html
