通过脚本实现更改

通过脚本实现更改

学习阶段了解脚本。我必须在每个新系统上进行以下更改。所以我创建了这些脚本,但不幸的是它不起作用。

我想了解,如果读取用户输入并将其保存在变量中,如何在一段时间后再次使用它。就像在这个脚本中,我要求用户输入Is this a DNS Serverwhat is the rev of the server

#!/bin/bash


    echo -n "Is this a DNS Server [y n]?"
    read command

    if [ $command = n ]
            then
                    yum -y install dnsmasq
                    yum -y install net-snmp net-snmp-utils
    elif [ $command = n ]
            then
                    echo $command

    else
            echo "DNS Package installation should be excluded"

    fi

cat <<EOF>>  scriptos.sh
!/bin/sh


export rev="avi"
export DNS_FLG="Y"
export DNS_FLG="N"
EOF


echo -n "what is the rev of the server"
read rev

if [ $rev = y ]
        then
                echo export LOC=$rev
if [ $rev = N ]
        then
                echo export DNS_FLG="Y"

if [ $rev = Y ]
        then
                echo export DNS_FLG="Y"

fi


echo "what your GW"
read GW
echo "what is your NW"
read NW

echo 192.168.0.0/16 via ${GW}  >  /etc/sysconfig/network-scripts/route-eth1
echo ${NW} via ${GW} >> /etc/sysconfig/network-scripts/route-eth1


/etc/init.d/network restart

由于以下错误,该脚本无法运行。

[root@centos6 ~]# ./script
Is this a DNS Server [y n]?y
DNS Package installation should be excluded
what is the rev of the servery
./script: line 57: syntax error: unexpected end of file

答案1

首先:编程语言对语法很挑剔。在 sh/bash 中,[作为独立的命令(与大多数其他语言中的括号不同),因此它以及其所有参数都需要用空格分隔。因此:

if [ "$command" = y ]; then
elif [ "$command" = n ]; then
fi

第二:你的许多条件块都缺少结束符fi。这是总是 if…then…fi

第三:有些提示会检查小写字母y/n,而有些提示会检查大写字母Y/N。你应该始终在任何地方接受相同的输入。例如:

# option 1 – make the variable lower-case

if [ "${command,,}" = y ]; then

# option 2 (bash-only) – use extended match

if [[ $command == @(y|Y) ]]; then

# option 3 (sh/bash) – use 'case' alternatives

case $command in
    y|Y)
        … ;;
    n|N)
        … ;;
esac

第四:<<EOF重定向输入。该echo命令不需要任何输入(仅命令行)。您可能想要使用cat <<EOF相反,不要忘记用EOF线来结束文本。

最后,确保将#!/bin/sh#!/usr/bin/env bash标题放在所有脚本的顶部。

相关内容