我得到了bash脚本,但是当我运行它时,我遇到了一些错误:
第 54 行:警告:此处文档第 42 行由文件结尾分隔(需要"EOF")
#!/bin/bash
echo "PODAJ IMIE"
read imie
echo "PODAJ NAZWISKO"
read nazwisko
alias="$imie$nazwisko"
echo "$alias"
while [ 1 ]
do
i=1
if [ `egrep $alias /etc/passwd |wc -l` -gt 0 ]; then i=0
fi
if [ $i -eq 0 ]; then
echo "Uzytkownik o podanym aliasie już istnieje!"
echo "PODAJ INNY ALIAS np. "$alias"1"
read alias
else
echo "PODAJ HASLO"
read -s password
echo "PODAJ NUMER POKOJU"
read pokoj
#adduser --disabled-password --gecos "$imie $nazwisko,$pokoj, ," $alias
adduser --quiet --disabled-password -shell /bin/bash --home /home/$alias --gecos "$imie $nazwisko, $pokoj, , " $alias
echo "$alias:$password" | chpasswd
#echo -e "$haslon$haslon" | sudo passwd $alias
dir=/home/$alias
mkdir $dir/public_html
mkdir $dir/samba
cd $dir/public_html
mkdir private_html
cat <<EOF >>$dir/.bashrc
echo "alias ps =/bin/ps"
echo "alias ls =/bin/ls"
t=`date +%F.%H:%M:%S`
echo "WITAJn"
echo "DZISIAJ MAMY:$t"
echo "TWOJE OSTATNIE LOGOWANIE:" && " lastlog -u $USER | tail -n 1 | awk '{print $4" "$5" "$6" "$7" "$9}'"
EOF
break
fi
done
EOF
需要位于一行的开头,并且之后没有任何内容(包括没有空格)。
该区块中的一些echo
是怀疑。变量替换后,直到结束标记的文本将按原样复制到文件中,而不是执行 - 看起来您不希望在此处替换。
试试这个:(注意cat
行上"EOF"
周围的引号)
cat <<"EOF" >>$dir/.bashrc
alias ps=/bin/ps
alias ls=/bin/ls
t=$(date +%F.%H:%M:%S)
echo "WITAJn"
echo "DZISIAJ MAMY: $t"
echo "TWOJE OSTATNIE LOGOWANIE:" $(lastlog -u $USER | tail -n 1 | awk '{print $4" "$5" "$6" "$7" "$9}')
EOF
EOF 分隔符需要在最左侧的列中对齐。
这是我经常为对齐所做的。
Lots
Of
Indents
cat <<-____________HERE
boo
____________HERE
done
done
done
使用
<Tab><Tab>cat <<-EOF >>$dir/.bashrc
#--------------------^- added a "-" char
<Tab><Tab> echo " ... "
<Tab><Tab> echo " ... "
<Tab><Tab>EOF
其中 EOF 现在前面有一个-
字符。这向 shell 指示关闭的此处文件标记将(可以)用制表符缩进。如果你不小心写,<Tab><Tab><Space>EOF
它不会匹配,但 0,1,2,...,100 <Tab>EOF
会匹配。
希斯