2017-06-16 18 views
1

我正在編寫shell腳本,它將列出驅動程序.ko文件並在init文件中添加條目。文件進入initramfs。如何替換文件中的字符串

所以下面的一些事情我已經做了腳本,我試過谷歌,但解決方案不工作,所以最後我不得不提出問題。

幾個問題,

1)我試圖存儲與換行符字符串變量,但它使得它在一個單一的線,所以我用不同的方法,我寫成預期具有數據的文件。

2)現在我想把新的線字符放在初始化文件的中間,這是低於一些驅動程序條目,所以我決定找到最後的驅動程序, 然後用驅動程序替換我的內容,然後再次追加司機回檔。

3)但我無法替換文本,所以我再次使用不同的方法逐行寫新文件,當我找到驅動程序添加我的內容並將驅動程序追加回文件中。但是現在我保存在早期文件中的內容附加在一行中,沒有換行符。

我不是殼牌的專家,我正在用谷歌做所有的事情。下面是我的代碼

#!/bin/bash 
    rm tmp.txt 
    handled_drivers=() 
    for driver in `cat lib/modules/2.6.18-419.el5/modules.dep | tr -d ":" | tr " " "\n"` 
    do 
      handled=0 
      for d in ${handled_drivers[@]} 
      do 
        if [ "$d" == "$driver" ] 
        then 
         handled=1 
        fi 
      done 
      if [ $handled -eq 0 ] 
      then 
       handled_drivers+=($driver) 
       echo "insmod $driver" >> tmp.txt 
       echo "echo \"Loading $(basename "$driver") module\"" >> tmp.txt 
      fi 
    done 

    value=`cat tmp.txt` 

    find_last_driver=`cat initcopy | grep insmod | tail -1| tr -d "\n"` 

    # 
    #if [[ -z $find_last_driver ]];then 
    # echo "Not Found driver skip injection" 
    #else 
    # echo "here $find_last_driver" 
    # sed -i -e 's/$find_last_driver/$value/g' ./a.txt 
    #fi 

    while IFS= read -r line;do 
     if [ "$line" == "$find_last_driver" ] 
     then 
     echo $value >> init_new 
     echo $line >> init_new 
    else 
     echo $line >> init_new 
    fi 
done < "init" 

下面是輸出文件的內容:

#!/bin/nash 

mount -t proc /proc /proc 
setquiet 
echo Mounting proc filesystem 
echo Mounting sysfs filesystem 
mount -t sysfs /sys /sys 
echo Creating /dev 
mount -o mode=0755 -t tmpfs /dev /dev 
mkdir /dev/pts 
mount -t devpts -o gid=5,mode=620 /dev/pts /dev/pts 
mkdir /dev/shm 
mkdir /dev/mapper 
echo Setting up hotplug. 
hotplug 
insmod /lib/uhci-hcd.ko 
mount -t usbfs /proc/bus/usb /proc/bus/usb 
echo "Loading jbd.ko module" 
insmod /lib/jbd.ko 
echo "Loading ext3.ko module" 
insmod /lib/ext3.ko 
echo "Loading scsi_mod.ko module" 
insmod /lib/dm-message.ko 
echo "Loading dm-raid45.ko module" 
insmod /lib/modules/2.6.18-419.el5/kernel/drivers/ata/ata_piix.ko echo "Loading ata_piix.ko module" insmod /lib/modules/2.6.18-419.el5/kernel/drivers/ata/libata.ko echo "Loading libata.ko module" insmod /lib/modules/2.6.18-419.el5/kernel/drivers/scsi/scsi_mod.ko echo "Loading scsi_mod.ko module" insmod /lib/modules/2.6.18-419.el5/kernel/crypto/crypto_algapi.ko echo "Loading crypto_algapi.ko module" insmod /lib/modules/2.6.18-419.el5/kernel/crypto/crypto_api.ko echo "Loading crypto_api.ko module" insmod /lib/modules/2.6.18-419.el5/kernel/drivers/md/dm-crypt.ko echo "Loading dm-crypt.ko module" insmod /lib/modules/2.6.18-419.el5/kernel/drivers/md/dm-mod.ko echo "Loading dm-mod.ko module" insmod /lib/modules/2.6.18-419.el5/kernel/drivers/md/dm-emc.ko echo "Loading dm-emc.ko module" insmod /lib/modules/2.6.18-419.el5/kernel/drivers/md/dm-multipath.ko echo "Loading dm-multipath.ko module" insmod /lib/modules/2.6.18-419.el5/kernel/drivers/scsi/device_handler/scsi_dh.ko echo "Loading scsi_dh.ko module" insmod /lib/modules/2.6.18-419.el5/kernel/drivers/md/dm-hp-sw.ko echo "Loading dm-hp-sw.ko module" insmod /lib/modules/2.6.18-419.el5/kernel/drivers/md/dm-log.ko echo "Loading dm-log.ko module" insmod /lib/modules/2.6.18-419.el5/kernel/drivers/md/dm-mem-cache.ko echo "Loading dm-mem-cache.ko module" insmod /lib/modules/2.6.18-419.el5/kernel/drivers/md/dm-message.ko echo "Loading dm-message.ko module" insmod /lib/modules/2.6.18-419.el5/kernel/drivers/md/dm-mirror.ko echo "Loading dm-mirror.ko module" insmod /lib/modules/2.6.18-419.el5/kernel/drivers/md/dm-raid45.ko echo "Loading dm-raid45.ko module" insmod /lib/modules/2.6.18-419.el5/kernel/drivers/md/dm-region_hash.ko echo "Loading dm-region_hash.ko module" insmod /lib/modules/2.6.18-419.el5/kernel/drivers/md/dm-rdac.ko echo "Loading dm-rdac.ko module" insmod /lib/modules/2.6.18-419.el5/kernel/drivers/md/dm-round-robin.ko echo "Loading dm-round-robin.ko module" insmod /lib/modules/2.6.18-419.el5/kernel/drivers/md/dm-snapshot.ko echo "Loading dm-snapshot.ko module" insmod /lib/modules/2.6.18-419.el5/kernel/drivers/md/dm-zero.ko echo "Loading dm-zero.ko module" insmod /lib/modules/2.6.18-419.el5/kernel/drivers/usb/net/dm9601.ko echo "Loading dm9601.ko module" insmod /lib/modules/2.6.18-419.el5/kernel/drivers/usb/net/usbnet.ko echo "Loading usbnet.ko module" insmod /lib/modules/2.6.18-419.el5/kernel/drivers/dma/dmaengine.ko echo "Loading dmaengine.ko module" insmod /lib/modules/2.6.18-419.el5/kernel/drivers/hwmon/dme1737.ko echo "Loading dme1737.ko module" insmod /lib/modules/2.6.18-419.el5/kernel/drivers/i2c/i2c-core.ko echo "Loading i2c-core.ko module" insmod /lib/modules/2.6.18-419.el5/kernel/drivers/net/tulip/dmfe.ko echo "Loading dmfe.ko module" insmod /lib/modules/2.6.18-419.el5/kernel/drivers/scsi/mpt2sas/mpt2sas.ko echo "Loading mpt2sas.ko module" insmod /lib/modules/2.6.18-419.el5/kernel/drivers/scsi/scsi_transport_sas.ko echo "Loading scsi_transport_sas.ko module" insmod /lib/modules/2.6.18-419.el5/kernel/drivers/message/fusion/mptbase.ko echo "Loading mptbase.ko module" insmod /lib/modules/2.6.18-419.el5/kernel/drivers/message/fusion/mptctl.ko echo "Loading mptctl.ko module" insmod /lib/modules/2.6.18-419.el5/kernel/drivers/message/fusion/mptfc.ko echo "Loading mptfc.ko module" insmod /lib/modules/2.6.18-419.el5/kernel/drivers/message/fusion/mptscsih.ko echo "Loading mptscsih.ko module" insmod /lib/modules/2.6.18-419.el5/kernel/drivers/message/fusion/mptlan.ko echo "Loading mptlan.ko module" insmod /lib/modules/2.6.18-419.el5/kernel/drivers/message/fusion/mptsas.ko echo "Loading mptsas.ko module" insmod /lib/modules/2.6.18-419.el5/kernel/drivers/message/fusion/mptspi.ko echo "Loading mptspi.ko module" insmod /lib/modules/2.6.18-419.el5/misc/pvscsi.ko echo "Loading pvscsi.ko module" insmod /lib/modules/2.6.18-419.el5/kernel/drivers/scsi/device_handler/scsi_dh_alua.ko echo "Loading scsi_dh_alua.ko module" insmod /lib/modules/2.6.18-419.el5/kernel/drivers/scsi/device_handler/scsi_dh_emc.ko echo "Loading scsi_dh_emc.ko module" insmod /lib/modules/2.6.18-419.el5/kernel/drivers/scsi/device_handler/scsi_dh_rdac.ko echo "Loading scsi_dh_rdac.ko module" insmod /lib/modules/2.6.18-419.el5/kernel/drivers/pci/hotplug/shpchp.ko echo "Loading shpchp.ko module" 
insmod /lib/dm-raid45.ko 
echo Waiting for driver initialization. 
stabilized --hash --interval 1000 /proc/scsi/scsi 
mkblkdevs 
echo Mounting root filesystem. 
mount /sysroot 
echo Setting up other filesystems. 
setuproot 
echo Switching to new root and running init. 
switchroot 
+1

的可能的複製環繞[查找和替換文件中的字符串(HTTPS ://sackoverflow.com/questions/4437901/find-and-replace-string-in-a-file) – slim

+0

@slim我用雙「」爲sed,我得到了sed:-e表達式#1,字符15:未知選項's'這個錯誤 – Dipak

+0

'echo' sed命令。看看字符15,看看問題是什麼。 – slim

回答

1

1)我試圖存儲與換行符字符串變量, 卻使得它在一個單行,所以我用不同的方法我寫了一個文件,其中有數據如預期的那樣。

當一個變量包含空格突舌換行,以避免分裂:用雙引號

echo "$value" >> init_new 
    echo "$line" >> init_new 

,而不是

echo $value >> init_new 
    echo $line >> init_new 
+0

偉大的,真的解決了我的問題:) – Dipak