shell腳本ip
A. shell 腳本運行輸入ip格式錯誤,怎麼重新輸入
sh 絕對路徑/xxx.sh 參數1 參數2 參數3........參數n
---------------------------------------------------------------------------------
如果你保存臨時文件的話,可以使用xargs
比如腳本文件為1.sh,而參數保存在args文件中,用一個命令得到參數內容
cat args
那麼最後可以這樣執行
cat args |xargs sh 1.sh
如果不打算保存臨時文件,那你只好在腳本中寫清楚要如何調用,參數有幾個。
比如你使用2.sh調用1.sh,在2.sh 中寫清楚
1.sh $arg1 $arg2這樣就可以了。
當然腳本中的arg1,arg2也可以是最初的第一個腳本調用傳遞進來的,也可以是硬編碼寫死的。
B. 幫忙寫一個shell腳本 轉換ip
echo $IPADDR|awk -F"." '{print $1"."$2"."($3+0)"."($4+0)}'
C. shell 腳本獲得當前 ip地址
bin=$(ifconfig | awk -F'addr:|Bcast' '/Bcast/{print $2}')
D. shell腳本如何實現把IP組里的ip逐個輸出,並循環完成指定任務
#!/bin/bash
host=192.168.1.1,192.168.1.2,192.168.1.3
array=(`echo $host|tr ',' ' '`)
for ip in ${array[@]};do
scp XXX root@$ip:~
ssh root@$ip << ressh
執行命令
exit
ressh
done
E. shell腳本配置IP
你編輯的是ifcfg-eth2,怎麼寫進去的Device是eth0??
我是6.5的測試系統,執行之後可以正常啟動,不過報錯是針對/etc/init.d/network這個腳本的
./IP_eth0.sh 104
/etc/init.d/network: line 184: command not found
/etc/init.d/network: line 184: 33mDEVICE=eth0: command not found
/etc/init.d/network: line 185: command not found
/etc/init.d/network: line 185: 33mTYPE=Ethernet: command not found
/etc/init.d/network: line 184: command not found
/etc/init.d/network: line 184: 33mDEVICE=eth1: command not found
/etc/init.d/network: line 185: command not found
/etc/init.d/network: line 185: 33mTYPE=Ethernet: command not found
/etc/init.d/network: line 184: command not found
/etc/init.d/network: line 184: 33mDEVICE=eth2: command not found
/etc/init.d/network: line 185: command not found
/etc/init.d/network: line 185: 33mTYPE=Ethernet: command not found
F. shell腳本修改集群IP
程序邏輯有問題。
你的想法是將10.255.0.11改成11.11.11.14,10.255.0.12改成11.11.11.15,
但是你的腳本是在每一台伺服器上都遍歷了11.11.11.14~15,最後修改成的ip(11.11.11.15)才是生效的,之前的修改都被後面的修改覆蓋了。
正確的寫法是建立兩個數組分別表示原來的ip和新的ip,遍歷第一個數組的同時,按照元素序號對應取第二個數組的值,從而達到修改的目的。
兩個數組同步遍歷的寫法如下:
#!/bin/bash
array1=(10.255.0.{11..12})
array2=(11.11.11.{14..15})
i=0
for ip in ${array1[@]}
do
echo ${ip}"->"${array2[i]}
#你的修改
#你的修改
let i++
done
補充一句,你的修改不會使新ip生效,即使生效了,也因為ip生效一瞬間你的ssh連接中斷,會產生無法估計的後果。正確的做法以單引號引用一個後台重啟網卡服務的命令:
ssh $RemoteHost 'service xinetd restart 1>/dev/null 2>&1 &'
當然,不同linux版本重啟命令不一致,但基本寫法是通行的。
G. shell腳本,實現腳本ip地址變換,每次輸出不同的ip地址。
先看效果:
[root@mailtmp]#./runplayload.shiplist.txt-s192.168.33.34-40
Nosuchip【192.168.33.35】in【iplist.txt】
1--192.168.33.34
2--192.168.33.36
3--192.168.33.37
4--192.168.33.38
5--192.168.33.39
6--192.168.33.40
[root@mailtmp]#./runplayload.shiplist.txt-s192.168.33.34-192.168.33.40
Nosuchip【192.168.33.35】in【iplist.txt】
1--192.168.33.34
2--192.168.33.36
3--192.168.33.37
4--192.168.33.38
5--192.168.33.39
6--192.168.33.40
[root@mailtmp]#
看一下iplist.txt文本格式
[root@mailtmp]#catiplist.txt
192.168.33.34
192.168.33.36-192.168.33.40
192.168.33.200
192.168.33.204-210
192.168.33.231
腳本正文:
#!/bin/bash
#------------------------------------------
#Copyritht(C),[email protected]
#腳本名:
#腳本位置:
#腳本用途:
#腳本修改歷史:
#<作者><日期><版本><描述>
#老耿2015/07/131.0創建
#版權:GPL
#-------------------------------------------
./root/.bash_profile
#定義ip個數
r=6
#傳參判斷
echo$3|grep-q"[0-9]-[0-9]";stat=$?#這里在邏輯上應該先判斷存不存在$3
if[$#-ne3-o"$2"!="-s"-o${stat}-ne0];then
if[$stat-ne0];then
echo"腳本使用說明:
COMMAND文件名-sip范圍
例:sh./run_playload.shiplist.txt-s192.168.33.20-50
或sh./run_playload.shiplist.txt-s192.168.33.20-192.168.33.50"
exit
fi
fi
if[!-f$1];then
echo"文件【$1】不存在!"
exit
fi
#iplist.txt文件格式轉換
iplist=`cat$1|awk-F'[-.]''{if($0~/-/){sub(/-.*$/,"",$4);for(i=$4;i<=$NF;i++){print$1"."$2"."$3"."i}}elseprint$0}'`
#xx.xx.xxipv4前三個位元組
ip1="`echo$3|sed-r's/.[0-9]+-.*$//'`"
#起始ip最後一個位元組
ip2="`echo$3|awk-F'.''{sub(/-.*$/,"",$4);print$4}'`"
#結束ip最後一個位元組
ip3="`echo$3|awk-F'[-.]''{print$NF}'`"
#如果起始ip大於結束ip,則兩個互換
if(($ip2>$ip3));then
ip_tmp=$ip2
ip2=$ip3
ip3=$ip_tmp
fi
#合並完整的ip,存在ip()里
ip=()
foriin`seq${ip2}${ip3}`
do
ipp="${ip1}.${i}"
echo"${iplist}"|grep-wq"${ipp}"
if[$?-ne0];then
echo"Nosuchip【${ipp}】in【$1】"
else
ip=(${ip[*]}${ipp})
fi
done
#判斷ip()不為空的情況
if[-n"${ip[*]}"];then
#定義ip個數
#r=6
#判斷ip取值個數,分兩種情況處理
if((${r}<=${#ip[@]}));then
foriin`seq${r}`
do
letj=$i-1
echo"${i}--${ip[j]}"
done
else
for((i=0;i<${#ip[@]};i++))
do
letj=$i+1
echo"${j}--${ip[i]}"
done
echo"WARNING:受范圍限制,未能取到完整的${r}個ip!"
fi
fi
H. shell腳本來配置永久IP地址
可以使用shell自動配置啊
樓主可以私信一下嗎?
以後如果有linux系統問題, shell自動編程問題,可以一起研究一下。
I. 求大神給一個shell腳本,實現腳本ip地址變換,每次輸出不同的ip地址。
先看效果:
[root@mailtmp]#./runplayload.shiplist.txt-s192.168.33.34-40
Nosuchip【192.168.33.35】in【iplist.txt】
1--192.168.33.34
2--192.168.33.36
3--192.168.33.37
4--192.168.33.38
5--192.168.33.39
6--192.168.33.40
[root@mailtmp]#./runplayload.shiplist.txt-s192.168.33.34-192.168.33.40
Nosuchip【192.168.33.35】in【iplist.txt】
1--192.168.33.34
2--192.168.33.36
3--192.168.33.37
4--192.168.33.38
5--192.168.33.39
6--192.168.33.40
[root@mailtmp]#
看一下iplist.txt文本格式
[root@mailtmp]#catiplist.txt
192.168.33.34
192.168.33.36-192.168.33.40
192.168.33.200
192.168.33.204-210
192.168.33.231
腳本正文:
#!/bin/bash
#------------------------------------------
#Copyritht(C),[email protected]
#腳本名:
#腳本位置:
#腳本用途:
#腳本修改歷史:
#<作者><日期><版本><描述>
#老耿2015/07/131.0創建
#版權:GPL
#-------------------------------------------
./root/.bash_profile
#定義ip個數
r=6
#傳參判斷
echo$3|grep-q"[0-9]-[0-9]";stat=$?#這里在邏輯上應該先判斷存不存在$3
if[$#-ne3-o"$2"!="-s"-o${stat}-ne0];then
if[$stat-ne0];then
echo"腳本使用說明:
COMMAND文件名-sip范圍
例:sh./run_playload.shiplist.txt-s192.168.33.20-50
或sh./run_playload.shiplist.txt-s192.168.33.20-192.168.33.50"
exit
fi
fi
if[!-f$1];then
echo"文件【$1】不存在!"
exit
fi
#iplist.txt文件格式轉換
iplist=`cat$1|awk-F'[-.]''{if($0~/-/){sub(/-.*$/,"",$4);for(i=$4;i<=$NF;i++){print$1"."$2"."$3"."i}}elseprint$0}'`
#xx.xx.xxipv4前三個位元組
ip1="`echo$3|sed-r's/.[0-9]+-.*$//'`"
#起始ip最後一個位元組
ip2="`echo$3|awk-F'.''{sub(/-.*$/,"",$4);print$4}'`"
#結束ip最後一個位元組
ip3="`echo$3|awk-F'[-.]''{print$NF}'`"
#如果起始ip大於結束ip,則兩個互換
if(($ip2>$ip3));then
ip_tmp=$ip2
ip2=$ip3
ip3=$ip_tmp
fi
#合並完整的ip,存在ip()里
ip=()
foriin`seq${ip2}${ip3}`
do
ipp="${ip1}.${i}"
echo"${iplist}"|grep-wq"${ipp}"
if[$?-ne0];then
echo"Nosuchip【${ipp}】in【$1】"
else
ip=(${ip[*]}${ipp})
fi
done
#判斷ip()不為空的情況
if[-n"${ip[*]}"];then
#定義ip個數
#r=6
#判斷ip取值個數,分兩種情況處理
if((${r}<=${#ip[@]}));then
foriin`seq${r}`
do
letj=$i-1
echo"${i}--${ip[j]}"
done
else
for((i=0;i<${#ip[@]};i++))
do
letj=$i+1
echo"${j}--${ip[i]}"
done
echo"WARNING:受范圍限制,未能取到完整的${r}個ip!"
fi
fi