我想寫一個修改文件的腳本。 我想檢查文件中的定義文本,如果它存在改變它,如果它不添加它。 文本改變的變量定義:多個循環
line1=text string 1
line2=text string 2
line3=text string 3
# new values
line1Arg=value 1
line2Arg=value 2
line3Arg=value 3
到目前爲止,我有以下幾點:
for i in $line1 $line2 $line3;
do
oldarg=`grep $i $file |cut -d"=" -f2`;
chkexists=`grep -c $i $file`
if [ $chkexists -eq 0 ]; then
cp $file $tmpfile
這是我在哪裏卡住了... 他做了一個變量$循環和linexArg添加到$ tmpfile?
echo $i='new value' >> $tmpfile;
echo "$i added with newvalue";
else
echo "$i exists with $oldarg";
可能很簡單,但我是新手腳本!
編輯1:
感謝馬特我現在有這個,從$ line1-5只增加了1行,它應該增加2條人失蹤線,4號線$ $和LINE5
file=/folder/file
tmpfile=$file.tmp
# strings to find and modify/add
line1=text string 1
line2=text string 2
line3=text string 3
line4=text string 4
line5=text string 5
# new values
line1Arg=120
line2Arg=370
line3Arg=100
line4Arg=999
line5Arg=1000
for i in $line1 $line2 $line3 $line4 $line5;
do
result=`grep $i $file`
if [ -z $result ]
then
cp $file $tmpfile
echo $i >> $tmpfile
else
cat $file | sed "s/$i/$newi/g" > $tmpfile
fi
done
什麼我掙扎是如何循環的2套的變量和格式添加缺少的字符串 $行1 = $ line1Arg
EDIT 2
因此,沒有我有以下...
file=/folder/file
tmpfile=$file.tmp
# strings to find and modify/add
line1=text string 1
line2=text string 2
line3=text string 3
line4=text string 4
line5=text string 5
# new values
line1Arg=120
line2Arg=370
line3Arg=100
line4Arg=999
line5Arg=1000
for i in $line1 $line2 $line3 $line4 $line5;
do
for x in $line1Arg $line2Arg $lineArg $line4Arg $line5Arg;
do
result=`grep $i $file`
oldarg=`grep $i $file |cut -d"=" -f2`
if [ -z $result ]
then
cp $file $tmpfile
echo $i=$x >> $tmpfile
echo "$i added with value $x"
else
if [ "$oldarg" = "$x" ]; then
echo "$i already set - no change"
else
sed "s/$i=.*/$i=${x}/g" $file > $tmpfile
echo "$i changed to value $x"
fi
fi
done
但它沒有添加所有缺少$ lineX = $ lineXArg文件? 我在想什麼?
編輯3
行,所以用sh -xi得到下面的輸出
> [email protected]:/ # sh -x /data/local/build.sh
> + file=/sdcard/documents/build.txt
> + tmpfile=/sdcard/documents/build.txt.tmp
> + line1=wifi.supplicant_scan_interval
> + line2=ro.sf.lcd_density
> + line3=ro.media.enc.jpeg.quality
> + line4=rixh.wallace
> + line5=ro.telephony.call_ring.delay
> + line1Arg=120
> + line2Arg=370
> + line3Arg=99999999
> + line4Arg=999
> + line5Arg=1000
> + grep wifi.supplicant_scan_interval /sdcard/documents/build.txt
> + result='wifi.supplicant_scan_interval=120'
> + grep wifi.supplicant_scan_interval /sdcard/documents/build.txt
> + cut '-d=' -f2
> + oldarg=120
> + '[' -z 'wifi.supplicant_scan_interval=120' ']'
> + cat /sdcard/documents/build.txt
> + >/sdcard/documents/build.txt.tmp
> + sed 's/wifi.supplicant_scan_interval=120/wifi.supplicant_scan_interval=120/g'
> + grep wifi.supplicant_scan_interval /sdcard/documents/build.txt
> + result='wifi.supplicant_scan_interval=120'
> + grep wifi.supplicant_scan_interval /sdcard/documents/build.txt
> + cut '-d=' -f2
> + oldarg=120
> + '[' -z 'wifi.supplicant_scan_interval=120' ']'
> + >/sdcard/documents/build.txt.tmp
> + cat /sdcard/documents/build.txt
> + sed 's/wifi.supplicant_scan_interval=120/wifi.supplicant_scan_interval=370/g'
> + grep wifi.supplicant_scan_interval /sdcard/documents/build.txt
> + result='wifi.supplicant_scan_interval=120'
> + grep wifi.supplicant_scan_interval /sdcard/documents/build.txt
> + cut '-d=' -f2
> + oldarg=120
> + '[' -z 'wifi.supplicant_scan_interval=120' ']'
> + >/sdcard/documents/build.txt.tmp
> + sed 's/wifi.supplicant_scan_interval=120/wifi.supplicant_scan_interval=999/g'
> + cat /sdcard/documents/build.txt
> + grep wifi.supplicant_scan_interval /sdcard/documents/build.txt
> + result='wifi.supplicant_scan_interval=120'
> + grep wifi.supplicant_scan_interval /sdcard/documents/build.txt
> + cut '-d=' -f2
> + oldarg=120
> + '[' -z 'wifi.supplicant_scan_interval=120' ']'
> + cat /sdcard/documents/build.txt
> + >/sdcard/documents/build.txt.tmp
> + sed 's/wifi.supplicant_scan_interval=120/wifi.supplicant_scan_interval=1000/g'
> + grep ro.sf.lcd_density /sdcard/documents/build.txt
> + result='ro.sf.lcd_density=370'
> + grep ro.sf.lcd_density /sdcard/documents/build.txt
> + cut '-d=' -f2
> + oldarg=370
> + '[' -z 'ro.sf.lcd_density=370' ']'
> + cat /sdcard/documents/build.txt
> + >/sdcard/documents/build.txt.tmp
> + sed 's/ro.sf.lcd_density=370/ro.sf.lcd_density=120/g'
> + grep ro.sf.lcd_density /sdcard/documents/build.txt
> + result='ro.sf.lcd_density=370'
> + grep ro.sf.lcd_density /sdcard/documents/build.txt
> + cut '-d=' -f2
> + oldarg=370
> + '[' -z 'ro.sf.lcd_density=370' ']'
> + cat /sdcard/documents/build.txt
> + >/sdcard/documents/build.txt.tmp
> + sed 's/ro.sf.lcd_density=370/ro.sf.lcd_density=370/g'
> + grep ro.sf.lcd_density /sdcard/documents/build.txt
> + result='ro.sf.lcd_density=370'
> + grep ro.sf.lcd_density /sdcard/documents/build.txt
> + cut '-d=' -f2
> + oldarg=370
> + '[' -z 'ro.sf.lcd_density=370' ']'
> + cat /sdcard/documents/build.txt
> + >/sdcard/documents/build.txt.tmp
> + sed 's/ro.sf.lcd_density=370/ro.sf.lcd_density=999/g'
> + grep ro.sf.lcd_density /sdcard/documents/build.txt
> + result='ro.sf.lcd_density=370'
> + grep ro.sf.lcd_density /sdcard/documents/build.txt
> + cut '-d=' -f2
> + oldarg=370
> + '[' -z 'ro.sf.lcd_density=370' ']'
> + cat /sdcard/documents/build.txt
> + >/sdcard/documents/build.txt.tmp
> + sed 's/ro.sf.lcd_density=370/ro.sf.lcd_density=1000/g'
> + grep ro.media.enc.jpeg.quality /sdcard/documents/build.txt
> + result='ro.media.enc.jpeg.quality=100'
> + grep ro.media.enc.jpeg.quality /sdcard/documents/build.txt
> + cut '-d=' -f2
> + oldarg=100
> + '[' -z 'ro.media.enc.jpeg.quality=100' ']'
> + cat /sdcard/documents/build.txt
> + >/sdcard/documents/build.txt.tmp
> + sed 's/ro.media.enc.jpeg.quality=100/ro.media.enc.jpeg.quality=120/g'
> + grep ro.media.enc.jpeg.quality /sdcard/documents/build.txt
> + result='ro.media.enc.jpeg.quality=100'
> + grep ro.media.enc.jpeg.quality /sdcard/documents/build.txt
> + cut '-d=' -f2
> + oldarg=100
> + '[' -z 'ro.media.enc.jpeg.quality=100' ']'
> + cat /sdcard/documents/build.txt
> + >/sdcard/documents/build.txt.tmp
> + sed 's/ro.media.enc.jpeg.quality=100/ro.media.enc.jpeg.quality=370/g'
> + grep ro.media.enc.jpeg.quality /sdcard/documents/build.txt
> + result='ro.media.enc.jpeg.quality=100'
> + grep ro.media.enc.jpeg.quality /sdcard/documents/build.txt
> + cut '-d=' -f2
> + oldarg=100
> + '[' -z 'ro.media.enc.jpeg.quality=100' ']'
> + cat /sdcard/documents/build.txt
> + >/sdcard/documents/build.txt.tmp
> + sed 's/ro.media.enc.jpeg.quality=100/ro.media.enc.jpeg.quality=999/g'
> + grep ro.media.enc.jpeg.quality /sdcard/documents/build.txt
> + result='ro.media.enc.jpeg.quality=100'
> + grep ro.media.enc.jpeg.quality /sdcard/documents/build.txt
> + cut '-d=' -f2
> + oldarg=100
> + '[' -z 'ro.media.enc.jpeg.quality=100' ']'
> + cat /sdcard/documents/build.txt
> + >/sdcard/documents/build.txt.tmp
> + sed 's/ro.media.enc.jpeg.quality=100/ro.media.enc.jpeg.quality=1000/g'
> + grep rixh.wallace /sdcard/documents/build.txt
> + result=
> + grep rixh.wallace /sdcard/documents/build.txt
> + cut '-d=' -f2
> + oldarg=
> + '[' -z ']'
> + cp /sdcard/documents/build.txt /sdcard/documents/build.txt.tmp
> + >>/sdcard/documents/build.txt.tmp
> + echo 'rixh.wallace=120'
> + grep rixh.wallace /sdcard/documents/build.txt
> + result=
> + grep rixh.wallace /sdcard/documents/build.txt
> + cut '-d=' -f2
> + oldarg=
> + '[' -z ']'
> + cp /sdcard/documents/build.txt /sdcard/documents/build.txt.tmp
> + >>/sdcard/documents/build.txt.tmp
> + echo 'rixh.wallace=370'
> + grep rixh.wallace /sdcard/documents/build.txt
> + result=
> + grep rixh.wallace /sdcard/documents/build.txt
> + cut '-d=' -f2
> + oldarg=
> + '[' -z ']'
> + cp /sdcard/documents/build.txt /sdcard/documents/build.txt.tmp
> + >>/sdcard/documents/build.txt.tmp
> + echo 'rixh.wallace=999'
> + grep rixh.wallace /sdcard/documents/build.txt
> + result=
> + grep rixh.wallace /sdcard/documents/build.txt
> + cut '-d=' -f2
> + oldarg=
> + '[' -z ']'
> + cp /sdcard/documents/build.txt /sdcard/documents/build.txt.tmp
> + >>/sdcard/documents/build.txt.tmp
> + echo 'rixh.wallace=1000'
> + grep ro.telephony.call_ring.delay /sdcard/documents/build.txt
> + result=
> + grep ro.telephony.call_ring.delay /sdcard/documents/build.txt
> + cut '-d=' -f2
> + oldarg=
> + '[' -z ']'
> + cp /sdcard/documents/build.txt /sdcard/documents/build.txt.tmp
> + >>/sdcard/documents/build.txt.tmp
> + echo 'ro.telephony.call_ring.delay=120'
> + grep ro.telephony.call_ring.delay /sdcard/documents/build.txt
> + result=
> + grep ro.telephony.call_ring.delay /sdcard/documents/build.txt
> + cut '-d=' -f2
> + oldarg=
> + '[' -z ']'
> + cp /sdcard/documents/build.txt /sdcard/documents/build.txt.tmp
> + >>/sdcard/documents/build.txt.tmp
> + echo 'ro.telephony.call_ring.delay=370'
> + grep ro.telephony.call_ring.delay /sdcard/documents/build.txt
> + result=
> + grep ro.telephony.call_ring.delay /sdcard/documents/build.txt
> + cut '-d=' -f2
> + oldarg=
> + '[' -z ']'
> + cp /sdcard/documents/build.txt /sdcard/documents/build.txt.tmp
> + >>/sdcard/documents/build.txt.tmp
> + echo 'ro.telephony.call_ring.delay=999'
> + grep ro.telephony.call_ring.delay /sdcard/documents/build.txt
> + result=
> + grep ro.telephony.call_ring.delay /sdcard/documents/build.txt
> + cut '-d=' -f2
> + oldarg=
> + '[' -z ']'
> + cp /sdcard/documents/build.txt /sdcard/documents/build.txt.tmp
> + >>/sdcard/documents/build.txt.tmp
> + echo 'ro.telephony.call_ring.delay=1000'
EDIT 4
當前代碼:
#/system/bin/sh
file=/sdcard/documents/build.txt
tmpfile=$file.tmp
# props to change
line1=wifi.supplicant_scan_interval
line2=ro.sf.lcd_density
line3=ro.media.enc.jpeg.quality
line4=rixh.wallace
line5=ro.telephony.call_ring.delay
# new values
line1Arg=120
line2Arg=480
line3Arg=99999999
line4Arg=999
line5Arg=6666666666666
for i in $line1 $line2 $line3 $line4 $line5; do
for x in $line1Arg $line2Arg $lineArg $line4Arg $line5Arg; do
result=`grep $i $file`
oldarg=`grep $i $file |cut -d"=" -f2`
if [ -z $result ]
then
cp $file $tmpfile
echo $i=$x >> $tmpfile;
echo "$i added with value $x"
else
cat $file | sed "s/$i=$oldarg/$i=$x/g"> $tmpfile
echo "$i edited to $x"
fi
done
done
和輸出:
ro.telephony.call_ring.delay added with value 6666666666666
wifi.supplicant_scan_interval edited to 120
wifi.supplicant_scan_interval edited to 480
wifi.supplicant_scan_interval edited to 999
wifi.supplicant_scan_interval edited to 6666666666666
ro.sf.lcd_density edited to 120
ro.sf.lcd_density edited to 480
ro.sf.lcd_density edited to 999
ro.sf.lcd_density edited to 6666666666666
ro.media.enc.jpeg.quality edited to 120
ro.media.enc.jpeg.quality edited to 480
ro.media.enc.jpeg.quality edited to 999
ro.media.enc.jpeg.quality edited to 6666666666666
rixh.wallace added with value 120
rixh.wallace added with value 480
rixh.wallace added with value 999
rixh.wallace added with value 6666666666666
ro.telephony.call_ring.delay added with value 120
ro.telephony.call_ring.delay added with value 480
ro.telephony.call_ring.delay added with value 999
ro.telephony.call_ring.delay added with value 6666666666666
'sed -i'/ text string/value /'file'有什麼問題? –
@glennjackman Id喜歡寫入臨時文件,所以我可以檢查所做的更改,然後將臨時文件複製到$ file – Valiceemo
'sed's/text string/value /'file> file.new' –