将文件中的行拆分为变量(接受空格)BASH

时间:2015-10-31 22:19:13

标签: linux bash dialog

我需要一个bash中的脚本来读取文件并识别分隔符(&#34 ;;")并将分隔符之间的值存储到变量中以便稍后构建对话框菜单。

我做了什么:

#!/bin/bash
file="Tarefas.cfg"
nomeTarefa=''
dirOrigem=''
dirDest=''
tipoBkp=''
agendarBkp=''
compactarBkp=''
gerarLog=''
echo
for linha in $(cat $file)
do
    nomeTarefa=$(echo $linha | cut -d\; -f1 )
    dirOrigem=$(echo $linha | cut -d\; -f2 )
    dirDest=$(echo $linha | cut -d\; -f3 )
    tipoBkp=$(echo $linha | cut -d\; -f4 )
    agendarBkp=$(echo $linha | cut -d\; -f5 )
    compactarBkp=$(echo $linha | cut -d\; -f6 )
    gerarLog=$(echo $linha | cut -d\; -f7 )
    echo "$nomeTarefa $dirOrigem $dirDest $tipoBkp $agendarBkp $compactarBkp $gerarLog"
    echo
done

它读取的文件是:

Minha Tarefa;/home/;/home/;Diferencial;;N;S;
Minha Tarefa;/home/thalesg;/home/;Diferencial;;N;S;

输出:

Minha Minha Minha Minha Minha Minha Minha

Tarefa /home/ /home/ Diferencial  N S

Minha Minha Minha Minha Minha Minha Minha

Tarefa /home/thalesg /home/ Diferencial  N S

1 个答案:

答案 0 :(得分:3)

使用while,你可以在一次通话中将一条线分成很多变量 您需要临时将FieldSep(IFS)更改为;
并避免额外拨打cat:不要使用cat $file | ..但请使用< $file

file="Tarefas.cfg"
while IFS=";" read nomeTarefa dirOrigem dirDest tipoBkp agendarBkp compactarBkp gerarLog; do
   echo "$nomeTarefa $dirOrigem $dirDest $tipoBkp $agendarBkp $compactarBkp $gerarLog"
   echo "Show one field, the compactarBkp: $compactarBkp"
done < $file