#funWithParam(){
# echo "The value of the first parameter is $1 !"
# echo "The value of the second parameter is $2 !"
echo "The value of the tenth parameter is ${10} !"
echo "The value of the eleventh parameter is ${11} !"
echo "The amount of the parameters is $# !" # 参数个数
echo "The string of the parameters is $* !" # 传递给函数的所有参数
}
funWithParam 1 2 3 4 5 6 7 8 9 34 73
#设定不同服务器下项目根目录
#设定根目录下微服务的文件夹
#传输要更新的jar文件
#stat -c %Y $
FILE_PATH="/root/zsw/reset.sh"
CREATE_DAY_STAMP=`stat -c %Y $FILE_PATH`;
echo "文件${FILE_PATH}的创建时间戳为${CREATE_DAY_STAMP}"
#date "+%Y-%m-%d %H:%M:%S" -d @1489739011
CREATE_DAY=`date '+%m%d' -d @$CREATE_DAY_STAMP`;
echo "文件创建时间简写为$CREATE_DAY"
#${FILE_PATH##*/}
FILE_NAME=${FILE_PATH##*/}
echo "文件名称为$FILE_NAME"
#更新文件,并将原来的文件末尾加上日期
#if [ ! -x "$myPath"]; then
#-x 参数判断$myPath是否存在并且是否具有可执行权限
#-d 参数判断$myPath是否存在
#-f参数判断$myFile是否存在
#格式化数字 printf "%02d\n" 1
updateFile() {
if [ ! $1 ]
then
echo "please input file name:"
fi
for fileName in $*
do
#判断文件是否存在
if [ -f "$fileName" ]; then
CREATE_DAY_STAMP=`stat -c %Y $fileName`;
CREATE_DAY=`date '+%m%d' -d @$CREATE_DAY_STAMP`;
newFileName="${fileName}.${CREATE_DAY}"
#判断新文件是否已经存在
i=1
while [ -f "$newFileName" ];
do
number=`printf "%02d\n" $i`
newFileName="${newFileName}.${number}"
i=`expr $i + 1`
done
echo "new fileName is $newFileName"
mv $fileName $newFileName
fi
done
}
updateFile
#参数
#普通传参
#$1 $2 获取第一个,第二个参数
# $# 获取参数个数
# $* 获取全部参数列表
#对于expect中接受参数
# [lindex $argv 0] 获取第一个参数
#传输文件
#scp 要传的文件 root@目标ip:路径
#scp -P 16022 local_file user@host:/dir -P指定端口,默认22
scp fff root@10.111.11.111:/root/zsw/
#取文件
scp root@10.111.11.111:/root/zsw/login.sh /root/zsw/
password
#远程登录
ssh root@10.111.11.111
#自动登录 得先安装expect这个东西 yum install expect
#login.sh
#!/usr/bin/expect -f
set timeout 20
spawn ssh root@10.111.11.111
expect "*assword:*"
send "password\r"
expect "]*"
send "echo \"ths param is [lindex $argv 0]\" "
interact
#expect $argv 参数数组
expect脚本可以接受从bash传递过来的参数.可以使用[lindex $argv n]获得,n从0开始,分别表示第一个,第二个,第三个....参数
其中,$argc为命令行参数的个数,$argv0为脚本名字本身,$argv为命令行参数。[lrange $argv 0 0]表示第1个参数,[lrange $argv 0 4]为第一个到第五个参数。与c语言不一样的地方在于,$argv不包含脚本名字本身。
#ssh传递命令
在ssh admin@koubei.inc.alipay.net 后面加上双引号,双引号中写你需要在目标服务器上执行的脚本,支持换行,不用加\,两个命令之间需要使用分号‘;’隔开。
#提高权限
#sudo chmod -R 777 某一目录
sudo chmod -R 777 ./
###正文开始#################################################################
#个人以为,发送代码不好。那就把文件本身发送过去,调不同的方法就好
#我在穆桑的基础上,1.加上发送jar包、2.发送启动文件本身、3.修改原来的文件、4.运行之前的重启方法、5.提示是否删除远程的启动文件
#遇到错误停止运行
set -e
#初始化常量
service=$1
#'' 不进行解释替换,直接输出、不执行
#"" 进行替换、解释、不执行
#``执行,比如 a=`1+1`
#获取现在的时间,并格式化
time=`date "+%Y-%m-%d %H:%M:%S "`
### test
#login.sh
#!/usr/bin/expect -f
set timeout 20
spawn ssh root@10.111.11.111
expect "*assword:*"
send "password\r"
expect "]*"
send "echo \"ths param is [lindex $argv 0]\" "
interact
#reset.sh
./login.sh " -params"
echo "fffffffffffffffffffff"
#数组--添加元素
func() {
serviceArr=(1 2)
serviceArr[4]=5
i=0
for v in $*
do
if [ $i -ge 2 ]; then
serviceArr[$i]=$v
fi
i=`expr $i + 1`;
done
echo
}
func a b c d e
#父脚本调用子脚本
#fork *.sh 不会返回子脚本的环境变量 console-> ./[脚本]
#exec *.sh 父脚本,子脚本在一个shell执行,且父脚本不往下执行
#source *.sh 子脚本调用完后,父脚本会得到子脚本的环境变量 console-> .空格[脚本]
#例子,shell脚本里调用expect
funcTest() {
ips=(
111
222
333
444
555
)
#遍历数组
for ip in ${ips[*]}
do
/usr/bin/expect<<-EOF #shell中使用expect
set timeout 90
spawn ssh root@10.111.11.111
expect "*assword:*"
send "password\r"
expect "]*"
send "cd /root/zsw \r"
expect "]*"
send "mkdir ttt \r"
exit
interact
expect eof
EOF
done
}
funcTest
#expect中怎么循环啊,在用<<-EOF的情况下