需求分析

基于adsl多拨安装步骤文档,若使用该文档进行拨号安装,需要手动执行的地方太多了,每执行一步,就需要运行相应的脚本,比较繁琐,容易混乱。

该脚本中所涉及到的功能在此脚本中均已实现,通过此脚本进行拨号可以大大减少出错的概率,以及减少相应的时间

操作细节
1、将此脚本copy至对应服务器中

2、第一次拨号须在家目录下创建/adsl_test目录,进入目录,创建 1.txt 文件(该文件是第一次拨号文件)

3、删除多余拨号资源须在/adsl_test/3.txt 文件中写入需要删除的账号 (该文件是需要删除的文件,需要和拨号账号一一对应)

4、增加新的拨号资源须在/adsl_test/2.txt 文件中写入需要增加的账号 (若增加的拨号资源是之前的旧资源,只不过需要改某些地方,则先执行删除账号后,在进行添加)

5、拨上号之后需等上一些时间等待拨号

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
#Author:teng

cd
home_path=`pwd`
back_file_dir=$home_path/adsl_test #文件位置

while true
do
#格式化输出以下菜单
cat <<EOF
-----------------------------菜单----------------------------------
- 1.首次添加拨号资源文件 -
- 2.查看网卡拨号情况 -
- 3.二次添加拨号资源(此功能尽量少用) -
- 4.删除多余拨号资源(此功能尽量少用) -
- 5.启用账号 -
- 6.暂停账号 -
- 7.查看当前某个账号暂停或者启用 -
- 8.退出(q) -
- 9.删除脚本 -
-注: -
-机器故障重启,重启完成后,2分钟左右,会完成自动拨号(保证挂载网卡-
-为eth0的情况下)。 -
-每天5:30分所有网卡会重新拨号。 -
-首次添加拨号资源先自行创建$back_file_dir/1.txt文件 -
-二次添加拨号资源先自行创建$back_file_dir/2.txt文件 -
-删除多余拨号资源先自行创建$back_file_dir/3.txt文件 -
-------------------------------------------------------------------
EOF

#接受用户输入的一个值
read -p "请输入你要执行的操作:>>>" num


Action(){

echo "进入adsl多拨初始化"
echo "即将进行解压压缩包"
tar xzvf adsl_multidial.tar0319.gz
if [ $? -eq 0 ]
then
echo "解压完成"
fi

echo "进入adsl_multidial目录"
cd adsl_multidial
echo "正在执行初始化脚本"
sh init.sh &> /dev/null
if [ $? -eq 0 ]
then
echo "初始化完成"
fi

[ -d $back_file_dir ] || mkdir -p $back_file_dir
if [ -f $back_file_dir/1.txt ]
then
#cat $back_file_dir/1.txt | while read txt
#do
# echo "正在添加拨号资源"
# $txt>>/Application/multidial/pcdn/adslaccount.txt
# sleep 1
# echo "拨号资源添加完成"
#done

cp $back_file_dir/1.txt /Application/multidial/pcdn/adslaccount.txt
if [ $? -eq 0 ]
then
sleep 1
echo "拨号资源添加完成"
fi

cd /Application/multidial
echo "正在执行adsl_init.sh脚本"
sh adsl_init.sh eth0 &> /dev/null
sleep 2
echo "adsl_init.sh脚本执行完毕"

cd /Application/multidial
echo "正在执行adsl_iprule.sh脚本"
sh adsl_iprule &> /dev/null
sleep 2
echo "adsl_iprule.sh脚本执行完毕"
echo "即将启动adslcheck服务"
systemctl daemon-reload &> /dev/null
if [ $? -eq 0 ]
then
echo "写入服务重启成功"
fi

systemctl start adslcheck.service &> /dev/null
if [ $? -eq 0 ]
then
echo "adslcheck服务启动完成"
else
echo "adslcheck服务启动失败"
fi

#systemctl status adslcheck.service $> /dev/null
#if [ $? -eq 0 ]
#then
# echo "adslcheck服务状态: active"
#else
# echo "adslcheck服务状态:失败"
#fi

sleep 5
echo "查看网卡拨号情况"
cat /Application/multidial/pcdn/log/information_log.txt

else
echo "若要添加拨号,请先创建$back_file_dir/1.txt文件"
fi

}

#查看拨号资源情况
See(){
cat /Application/multidial/pcdn/log/information_log.txt
}

Add(){
if [ -f $back_file_dir/2.txt ]
then
echo "正在批量导入添加拨号"
cp $back_file_dir/2.txt /Application/multidial/pcdn/add_del/add_account.txt
sleep 1
sh /Application/multidial/adsl_op.sh &>/dev/null
echo "拨号资源添加完成"

else
"若要添加新的拨号,请先创建$back_file_dir/2.txt文件"
fi
}


Delete(){
if [ -f $back_file_dir/3.txt ]
then
echo "正在批量导入删除拨号"
cp $back_file_dir/3.txt /Application/multidial/pcdn/add_del/del_account.txt
sleep 1
sh /Application/multidial/adsl_op.sh &>/dev/null
echo "拨号资源添加完成"

else
"若要删除已存在拨号,请先创建$back_file_dir/3.txt文件"
fi
}

Start(){
source /etc/init.d/functions

cd /Application/multidial
sh adsl_on_off.sh 6 1
if [ $? -eq 0 ]
then
action "账号已启用!" /bin/true
else
action "账号启用失败" /bin/false
fi
}

Stop(){
source /etc/init.d/functions

cd /Application/multidial
sh adsl_on_off.sh 6 0
if [ $? -eq 0 ]
then
action "账号已暂停!" /bin/true
else
action "账号暂停失败" /bin/false
fi
}

Cat(){
echo "第5列是0的账号为暂停,是1的账号为启动"
cat /Application/multidial/pcdn/adslaccount.txt
}

Del(){
rm -rf /root/adsl_test /root/adsl.sh
}

#利用case语句捕获用户键入的值。
#模式匹配成功,则执行相应函数。
case $num in
1)
Action
;;
2)
See
;;
3)
Add
;;
4)
Delete
;;
5)
Start
;;
6)
Stop
;;
7)
Cat
;;
8|q)
exit 0
;;
9)
Del
;;
*)
echo "请输入正确的参数..."
esac
done

vnc脚本实现一键式安装以及修改vnc密码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
#!/bin/bash
#Author:teng

#VNC_IP=`ip a |grep "global eth0"|awk '{print $2}'|cut -d / -f 1` #获取vnc服务器IP

echo "准备安装gnome桌面"
sleep 1

yum groupinstall -y "GNOME Desktop"

if [ $? -eq 0 ]
then
echo "安装完成,修改默认启动方式为图形化界面"
else
echo "gnome桌面安装失败"
echo "重新进行安装"
sleep 1
yum groupinstall -y "GNOME Desktop"

if [ $? -eq 0 ]
then
echo "安装完成,修改默认启动方式为图形化界面"
fi
fi

echo "设置成图形模式"
systemctl set-default graphical.target
if [ $? -eq 0 ]
then
echo "图形模式设置成功"
fi

echo "即将进入安装vnc服务"
sleep 1
yum install tigervnc-server -y

if [ $? -eq 0 ]
then
echo "vnc服务安装完成"
else
echo "vnc服务安装失败"
fi

echo "复制一个服务设置的模板"
cp /lib/systemd/system/vncserver@.service /etc/systemd/system/vncserver@:1.service

echo "修改服务配置"

echo -e "[Unit]
Description=Remote desktop service (VNC)
After=syslog.target network.target
[Service]
Type=forking
User=root
# Clean any existing files in /tmp/.X11-unix environment
ExecStartPre=-/usr/bin/vncserver -kill %i
ExecStart=/sbin/runuser -l root -c "/usr/bin/vncserver %i"
PIDFile=/root/.vnc/%H%i.pid
ExecStop=-/usr/bin/vncserver -kill %i
[Install]
WantedBy=multi-user.target">/etc/systemd/system/vncserver@\:1.service

if [ $? -eq 0 ]
then
sleep 1
echo "服务配置修改完成"
fi

#执行检测并安装expect模块
expect=`rpm -qa |grep expect`
if [ -z $expect ];then
echo "检测到你未安装expect模块,现在进行安装。。。"
sleep 1
yum install expect -y
else
echo "您已安装expect模块,接下来进行修改vnc密码"
sleep 1
fi


# /usr/bin/expect <<-EOF
# spawn ssh root@$VNC_IP "vncpasswd"
# expect {
# "*yes/no" { send "yes\r"; exp_continue }
# "*password" { send "*****\r"; exp_continue }
# "Password:" { send "*****\r"; exp_continue }
# "Verify:" { send "****\r"; exp_continue }
# "Would you like to enter a view-only password (y/n)?" { send "n\r"; exp_continue }
# }
# expect eof
#EOF
/usr/bin/expect <<EOF
set timeout 10
spawn vncpasswd
expect "Password:"
send "k**\n"
expect "Verify:"
send "k**\n"
expect "Would you like to enter a view-only password (y/n)?"
send "n\n"
interact
EOF

if [ $? -eq 0 ]
then
echo "vnc密码修改完成,密码为ks***,端口为5901"
else
echo "vnc密码修改失败"
fi

echo "启动vnc服务,开通端口"
systemctl start vncserver@:1

if [ $? -eq 0 ]
then
echo "vnc服务已启动"
else
echo "vnc服务启动失败"
fi

如何实现分发不同账号资源至多个文件

自动分发资源到不同文件解决思路:(遍历sed依次取出每行追加至相应文件)
若整除,则平均分配。若有余,则先平均分,分完后在分余数。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
#!/bin/bash
#Author:Teng
cd
home_path=`pwd`
back_file=$home_path/ansible_ppp/file/think
read -p "输入拨号资源总行数:" all_num
read -p "输入每台机器的拨号资源:" once_num

group_num=`echo $all_num/$once_num |bc`
num=`echo $all_num%$once_num |bc`

echo "需要cache设备:$group_num"
echo "余数:$num"

rm -rf $back_file/cache* #清理之前生成的cache文件,避免产生影响
if [ $? -eq 0 ]
then
echo $back_file/cache文件已清理
fi

a=1
m=1
C=p

while [ $a -le $group_num ]
do
n=`echo $a*$once_num|bc`
for i in `seq $m $n`
do
sed -n $i$C $back_file/adsl_num.txt >> $back_file/cache$a

done

let m+=$once_num
let a+=1
done

if [ $num -ne 0 ] #判断拨号资源是否被平均分配
then
x=`echo $group_num*$once_num+1|bc`
k=1
# while [ $k -le $num ]
# do

for i in `seq $x $all_num` #获取余数分别追加至文件
do
sed -n $i$C $back_file/adsl_num.txt >> $back_file/cache$k
let k+=1
done
fi

echo "拨号资源已分配完成($back_file)"