linux shell 笔记

#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的情况下
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值