伊軍領袖
@titain
說
Sat, Jul 2, 2022 4:57 AM
請問有關linux script一個小問題,現在要做的是需要一個.sh檔去修改設定檔裡面的參數
以下是我寫的script
但是我執行了都會跑出以下錯誤訊息
請問我是哪個參數下錯了?
什麼都不會的韭菜海星
@SmokingPC
Sat, Jul 2, 2022 5:24 AM
sed命令裡 value="xxx 這邊,在結尾處你少了一個雙引號
三行都是
什麼都不會的韭菜海星
@SmokingPC
Sat, Jul 2, 2022 5:25 AM
而且在這之前的 雙引號括起來的 value 我覺得怪怪的
伊軍領袖
@titain
說
Sat, Jul 2, 2022 5:25 AM
Sat, Jul 2, 2022 5:25 AM
啊,因為這個造成誤判了......我本來是想打短一點,我再試試
伊軍領袖
@titain
說
Sat, Jul 2, 2022 5:34 AM
改成這樣之後
變成這個錯誤訊息
伊軍領袖
@titain
說
Sat, Jul 2, 2022 5:34 AM
感覺是不是因為關鍵字裡面雙括號太多導致誤判?
伊軍領袖
@titain
說
Sat, Jul 2, 2022 5:49 AM
把檔案直接複製到那個目錄裡面再裁掉路徑的部分
目錄裡面確定是有這個檔案的
然後回應我找不到檔案.....
什麼都不會的韭菜海星
@SmokingPC
Sat, Jul 2, 2022 5:54 AM
我想一下,我八、九年沒用sed了
伊軍領袖
@titain
說
Sat, Jul 2, 2022 5:58 AM
還是有其他方法可以達成,我就只是想要取代設定檔裡面的文字而已
什麼都不會的韭菜海星
@SmokingPC
Sat, Jul 2, 2022 6:02 AM
<P Name那三行是要新增這三行,還是replace?
什麼都不會的韭菜海星
@SmokingPC
Sat, Jul 2, 2022 6:11 AM
如果是replace的話
第一行試試這個
sed -e 's/<P Name="Schedule" Value=".*"\/>/<P Name="Schedule" Value="3"\/>/' -i.bak /opt/TrendMicro/SProtectLinux/tmsplx.xml
什麼都不會的韭菜海星
@SmokingPC
Sat, Jul 2, 2022 6:11 AM
這會在replace同時,幫你建個 .bak的backup file...
什麼都不會的韭菜海星
@SmokingPC
Sat, Jul 2, 2022 6:12 AM
後面兩個就依樣畫葫蘆啦
伊軍領袖
@titain
說
Sat, Jul 2, 2022 6:14 AM
變成這樣.....
什麼都不會的韭菜海星
@SmokingPC
Sat, Jul 2, 2022 6:16 AM
你把第一行用cmdline 執行,不要在
https://scantime.sh
執行 試試看?
什麼都不會的韭菜海星
@SmokingPC
Sat, Jul 2, 2022 6:18 AM
/opt/TrendMicro/SProtectLinux/tmsplx.xml 有在這位置嗎?
什麼都不會的韭菜海星
@SmokingPC
Sat, Jul 2, 2022 6:19 AM
第二第三行 -e 的單引號哩,結尾的 / 你怎拿出單引號了?
那個sed -e 的命令格式是 -e 's/<%pattern%>/<%replace str%>/'
什麼都不會的韭菜海星
@SmokingPC
Sat, Jul 2, 2022 6:20 AM
我給你那行,用ubuntu 20.04試過是可以的
伊軍領袖
@titain
說
Sat, Jul 2, 2022 6:22 AM
伊軍領袖
@titain
說
Sat, Jul 2, 2022 6:22 AM
我這個是Centos6
什麼都不會的韭菜海星
@SmokingPC
Sat, Jul 2, 2022 6:24 AM
你看一下....copy出來cmdline執行那行不對
什麼都不會的韭菜海星
@SmokingPC
Sat, Jul 2, 2022 6:25 AM
Value=".* 這邊,後面的雙引號被吃掉了
Value="3"這邊, /> 不對,少了反斜線的escape
什麼都不會的韭菜海星
@SmokingPC
Sat, Jul 2, 2022 6:26 AM
tmsplx.xml能給我一份試試看嗎?
伊軍領袖
@titain
說
Sat, Jul 2, 2022 6:27 AM
家上去之後可以了
伊軍領袖
@titain
說
Sat, Jul 2, 2022 6:28 AM
在cmdline下
什麼都不會的韭菜海星
@SmokingPC
Sat, Jul 2, 2022 6:31 AM
okok
剩下的同理可證 XD
什麼都不會的韭菜海星
@SmokingPC
Sat, Jul 2, 2022 6:31 AM
shell script我記得是有些escape與命令字串處理不大一樣,你要查一下
伊軍領袖
@titain
說
Sat, Jul 2, 2022 6:33 AM
那個原先的"1"改成".*"的原因是?
什麼都不會的韭菜海星
@SmokingPC
Sat, Jul 2, 2022 6:45 AM
sed -e 's/ / /> 命令裡面是用正規表達式的
我不知道 tmsplx.xml 裡面那個 <P Name="Schedule" Value="" 的value 值會是多少,所以就寫 .*
其實應該 \d* 會比較好
什麼都不會的韭菜海星
@SmokingPC
Sat, Jul 2, 2022 6:45 AM
你寫 "1" ,那如果你要改的檔案這邊的值是 Value="2" 那就會取代失敗,我用 .* 的話,Value="xxx" 不管他xxx是多少都會抓得到
伊軍領袖
@titain
說
Sat, Jul 2, 2022 6:47 AM
崩潰了,寫進script裡面跑出來就不一樣
什麼都不會的韭菜海星
@SmokingPC
Sat, Jul 2, 2022 6:50 AM
我用script測試看一下怎回事
什麼都不會的韭菜海星
@SmokingPC
Sat, Jul 2, 2022 6:50 AM
你script 是csh 還是bash?
伊軍領袖
@titain
說
Sat, Jul 2, 2022 6:52 AM
.......怎麼看?印象中預設不是都bash嗎?
什麼都不會的韭菜海星
@SmokingPC
Sat, Jul 2, 2022 6:53 AM
我這樣測試是可以的
什麼都不會的韭菜海星
@SmokingPC
Sat, Jul 2, 2022 6:54 AM
第一行註解那邊,強制指定要用哪個shell跑這script
伊軍領袖
@titain
說
Sat, Jul 2, 2022 6:59 AM
........我的環境裡面好像沒有bash
伊軍領袖
@titain
說
Sat, Jul 2, 2022 7:08 AM
什麼鬼.....yum裡面又說我有裝=_=
什麼都不會的韭菜海星
@SmokingPC
Sat, Jul 2, 2022 7:13 AM
不是,你現在current shell是哪個?linux 有好幾種shell
沒指定的話就是用當前shell來執行script
伊軍領袖
@titain
說
Sat, Jul 2, 2022 7:24 AM
靈異了,我的預設值就是bash.....然後上面居然給我跳沒有?
什麼都不會的韭菜海星
@SmokingPC
Sat, Jul 2, 2022 7:31 AM
用cmdline測試命令對的話,就看一下你script哪裡設定不正確嚕....
伊軍領袖
@titain
說
Sat, Jul 2, 2022 7:33 AM
那我再慢慢抓吧.....這問題真夠鳥的
伊軍領袖
@titain
說
Sat, Jul 2, 2022 7:42 AM
Shell Script 報錯: bad interpreter: No such file or di...
..........居然是因為我先在windows那邊打好的鍋?
什麼都不會的韭菜海星
@SmokingPC
Sat, Jul 2, 2022 7:45 AM
你的script看起來沒有 ^M 啊
換行符號很麻煩是真的
伊軍領袖
@titain
說
Sat, Jul 2, 2022 7:46 AM
程式能跑了,但是後面兩行沒有替換到......還要再改
什麼都不會的韭菜海星
@SmokingPC
Sat, Jul 2, 2022 7:48 AM
沒替換到多半是search pattern的問題,空格問題最容易發生
你對正規表達式熟練不?看看是不是有空格問題吧...或是用 \\s* 來濾
伊軍領袖
@titain
說
Sat, Jul 2, 2022 7:49 AM
伊軍領袖
@titain
說
Sat, Jul 2, 2022 7:49 AM
完全不會用正規表達式.....
伊軍領袖
@titain
說
Sat, Jul 2, 2022 7:50 AM
一個要替換的是00:00:00還好,另外一個直接連空白都沒有
什麼都不會的韭菜海星
@SmokingPC
Sat, Jul 2, 2022 7:51 AM
框起來的地方要寫 \/
什麼都不會的韭菜海星
@SmokingPC
Sat, Jul 2, 2022 7:52 AM
框起來的地方你少寫了 /
什麼都不會的韭菜海星
@SmokingPC
Sat, Jul 2, 2022 7:52 AM
要寫成 \/
伊軍領袖
@titain
說
Sat, Jul 2, 2022 7:53 AM
成功了,感謝長輩協助
什麼都不會的韭菜海星
@SmokingPC
Sat, Jul 2, 2022 7:53 AM
"ScheduledWDay" Value=""
這邊Value=""裡面也可以寫 .*
. 是 any char 的意思
* 是 0 ~ N 個字 的意思
什麼都不會的韭菜海星
@SmokingPC
Sat, Jul 2, 2022 7:54 AM
正規表達式很好用,建議去看一下,練熟以後各種地方都能應用
伊軍領袖
@titain
說
Sat, Jul 2, 2022 7:54 AM
恩恩,很多基本功以前連需要學都不知道......
什麼都不會的韭菜海星
@SmokingPC
Sat, Jul 2, 2022 8:17 AM
晚點到家貼個regent cheat sheet 給你
伊軍領袖
@titain
說
Sat, Jul 2, 2022 8:55 AM
感謝長輩
📛ちゃちゃN🔰
@mprincess
Sat, Jul 2, 2022 10:58 AM
regex101
推薦這個測試ui
什麼都不會的韭菜海星
@SmokingPC
Sat, Jul 2, 2022 2:06 PM
伊軍領袖
:
伊軍領袖
@titain
說
Sat, Jul 2, 2022 3:10 PM
多謝
載入新的回覆
以下是我寫的script
但是我執行了都會跑出以下錯誤訊息
請問我是哪個參數下錯了?
三行都是
變成這個錯誤訊息
目錄裡面確定是有這個檔案的
然後回應我找不到檔案.....
第一行試試這個
sed -e 's/<P Name="Schedule" Value=".*"\/>/<P Name="Schedule" Value="3"\/>/' -i.bak /opt/TrendMicro/SProtectLinux/tmsplx.xml
變成這樣.....
那個sed -e 的命令格式是 -e 's/<%pattern%>/<%replace str%>/'
Value="3"這邊, /> 不對,少了反斜線的escape
剩下的同理可證 XD
我不知道 tmsplx.xml 裡面那個 <P Name="Schedule" Value="" 的value 值會是多少,所以就寫 .*
其實應該 \d* 會比較好
崩潰了,寫進script裡面跑出來就不一樣
........我的環境裡面好像沒有bash
什麼鬼.....yum裡面又說我有裝=_=
沒指定的話就是用當前shell來執行script
靈異了,我的預設值就是bash.....然後上面居然給我跳沒有?
..........居然是因為我先在windows那邊打好的鍋?
換行符號很麻煩是真的
你對正規表達式熟練不?看看是不是有空格問題吧...或是用 \\s* 來濾
這邊Value=""裡面也可以寫 .*
. 是 any char 的意思
* 是 0 ~ N 個字 的意思