[英]Shell Script: Read the first line of properties file separately form the rest of the lines
我正在编写一个外壳脚本,该脚本读取属性文件并执行一些操作。
那就是它从道具文件的第一行读取。
现在,在此脚本中,我想添加一个开关,如果启用,它将执行脚本并执行常规操作。
如果禁用,则将正常退出程序。 我想把这个三明治放在相同的道具文件中。 (即现在,prop文件的第一行将为ENABLED或DISABLED)
目前,我正在使用:
cat init_token.properties | while read line
现在,在此之前,我想分别读取开关的值,如果启用,则while读取行应从属性文件的第二行开始。 简而言之,我想区分一下Ist线的读数,然后其余部分。
init_token.properties的格式:
ENABLED
abc.dat IP 120.210.60.1
xyz.dat PORT 8200
pqr.dat IP 420.24012.4
脚本:
#!/bin/ksh
dos2unix init_token.properties &
# PATH for DAT files
DAT_FILE_PATH='.'
cat init_token.properties | while read line
do
# PARAMETER EXAMPLE - <FILENAME> <ATTRIBUTE> <VALUE>
# read FILENAME
FILENAME=`echo "$line" | awk -F " " '{print $1}'`
# read ATTRIBUTE
ATTRIBUTE=`echo "$line" | awk -F " " '{print $2}'`
# read VALUE
VALUE=`echo "$line" | awk -F " " '{print $3}'`
# setting fully qualified filepath name & temporary file
FULLPATH=$DAT_FILE_PATH"/"$FILENAME
TEMP_FILE=tempfile
old='$('$FILENAME'_'$ATTRIBUTE')'
# replace $(<FILEANME>_<ATTRIBUTE>) with VALUE if file exists
if [ -e $FULLPATH ]
then
sed 's/'$old'/'$VALUE'/g' $FULLPATH > $TEMP_FILE && mv $TEMP_FILE $FULLPATH
else
echo 'File '$FULLPATH' does not exists while replacing token '$old
fi
done
exit
您可以在脚本顶部尝试以下操作:
CHECK=$(head -n 1 prop.file)
if [ "$CHECK" == "DISABLED" ]; then
exit 0
fi
首先,您可以使用read
分隔行,因此您无需使用echo | awk
echo | awk
:
cat init_token.properties | while read filename attribute value
do
接下来是ENABLED / DISABLED / other的检查:
case "$filename" in
ENABLED) ;;
DISABLED) exit ;;
*)
# It's another line, do processing
...
;;
esac
done
另一点:不要在后台放置dos2unix ...
它可能比您的脚本运行更长的时间。 只要不带&
调用它:
dos2unix init_token.properties
也许是这样的
let CNTR=0
cat init_token.properties | while read line
do
let CNTR=CNTR+1
if [ $X == 1 ]; then
//is first line
else
//is not first line
fi
# PARAMETER EXAMPLE - <FILENAME> <ATTRIBUTE> <VALUE>
# read FILENAME
FILENAME=`echo "$line" | awk -F " " '{print $1}'`
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.