内容一:declare 命令的格式
# declare <option> <variable>
内容二:declare 命令的常用选项
1) -a,声明变量为数组
2) -A,声明变量为关联数组
3) -i,声明变量为整数
4) -l,将变量名转换为小写
5) -g,声明变量为全局变量
6) -r,让变量名只读
7) -u,将变量名转换为大写
8) -x,将变量输出到输出到子 Shell 中,其实就是将此变量设置成全局变量
# declare <option> <variable>
1) -a,声明变量为数组
2) -A,声明变量为关联数组
3) -i,声明变量为整数
4) -l,将变量名转换为小写
5) -g,声明变量为全局变量
6) -r,让变量名只读
7) -u,将变量名转换为大写
8) -x,将变量输出到输出到子 Shell 中,其实就是将此变量设置成全局变量
# complete=/dir1/dir2/dir3/dir4/test.file.txt
# echo ${complete#*/}
dir1/dir2/dir3/dir4/test.file.txt
(补充:这里以掐掉从左数第 1 个斜杠 “/” 以及前面的所有所有内容为例)
# complete=/dir1/dir2/dir3/dir4/test.file.txt
# echo ${complete##*/}
test.file.txt
(补充:这里以掐掉从左数最后 1 个斜杠 “/” 以及前面的所有所有内容为例)
# complete=/dir1/dir2/dir3/dir4/test.file.txt
# echo ${complete%.*}
/dir1/dir2/dir3/dir4/test.file
(补充:这里以掐掉从右数第 1 个点 “.” 以及后面的所有所有内容为例)
# complete=/dir1/dir2/dir3/dir4/test.file.txt
# echo ${complete%%.*}
/dir1/dir2/dir3/dir4/test
(补充:这里以掐掉从右数最后 1 个点 “.” 以及后面的所有所有内容为例)
# basename /root/test.txt
test.txt
(补充:这里以去除文件 /root/test.txt 的路径为例)
# basename /root/test.txt /home/mingyuzhu/mingyuzhu.txt
test.txt
(补充:这里以去除文件 /root/test.txt 和文件 /home/mingyuzhu/mingyuzhu.txt 的路径为例)
# basename -a /root/test.txt /home/mingyuzhu/mingyuzhu.txt
test.txt mingyuzhu.txt
(补充:这里以去除文件 /root/test.txt 和文件 /home/mingyuzhu/mingyuzhu.txt 的路径为例)
# basename -s .txt /root/test.txt
test
(补充:这里以去除文件 /root/test.txt 的路径同时去除后缀 .txt 为例)
在使用 spawn 参数之前,要先安装 expect
设置 expect 参数等待执行的时间 (默认是 30 秒) 或者其它变量
#!/bin/bash
set timeout 30
或者:
#!/usr/bin/expect
set timeout 30
(补充:这里以设置 expect 参数的等待时间为 30 秒为例)
脚本开始根据出现的输出自动执行命令
#!/bin/bash
expect << EOF
spawn ssh mingyuzhu@10.0.0.1
expect "password:" {send "123\r"}
expect ">" {send "\r"}
EOF
或者:
#!/usr/bin/expect
spawn ssh mingyuzhu@10.0.0.1
expect {"password:" {send "123\r"}}
expect eof
(补充:这里以使用 mingyuzhu 用户通过 SSH 登录 IP 地址为 10.0.0.1 的服务器,同时当输出的最后的字段是 “password:” 时自动输入 “123” 并回车为例)
后面接预期出现的内容。可以跟 send 参数配合,实现出现预期内容后执行什么命令,也可以不跟 send 参数配合只是出现什么内容后直接退出
#!/bin/bash
expect << EOF
spawn ssh mingyuzhu@10.0.0.1
expect "password:" {send "123\r"}
expect ">" {send "\r"}
EOF
或者:
#!/usr/bin/expect
spawn ssh mingyuzhu@10.0.0.1
expect {"password:" {send "123\r"}}
expect eof
(补充:这里以使用 mingyuzhu 用户通过 SSH 登录 IP 地址为 10.0.0.1 的服务器,同时当输出的最后的文本是 “password:” 时自动输入 “123” 并回车为例)
#!/usr/bin/expect
spawn ssh mingyuzhu@10.0.0.1
expect {
\"Linux*\" { exit 200 }
timeout { exit 100 }
incorrect { exit 100 }
eof { exit 100 }
}
return $?
interact
expect eof
(
补充:
1) 这里以使用 mingyuzhu 用户通过 SSH 登录 IP 地址为 10.0.0.1 的服务器
2) 同时当输出的最后的文本是以 “Linux” 开头时,返回值是 200,超市或其他的返回值是 100
3) 并最后将控制权还给用户为例
)
后面接要执行的命令。当预期出现的内容出现后,执行这些命令
#!/bin/bash
expect << EOF
spawn ssh mingyuzhu@10.0.0.1
expect "password:" {send "123\r"}
expect ">" {send "\r"}
EOF
或者:
#!/usr/bin/expect
spawn ssh mingyuzhu@10.0.0.1
expect {"password:" {send "123\r"}}
expect eof
(补充:这里以使用 mingyuzhu 用户通过 SSH 登录 IP 地址为 10.0.0.1 的服务器,同时当输出的最后的字段是 “password:” 时自动输入 “123” 并回车为例)
代表结束所有,如果没有 EOF 的话最后的命令可能不会执行完
#!/bin/bash
expect << EOF
spawn ssh mingyuzhu@10.0.0.1
expect "password:" {send "123\r"}
expect ">" {send "\r"}
EOF
或者:
#!/usr/bin/expect
spawn ssh mingyuzhu@10.0.0.1
expect {"password:" {send "123\r"}}
expect eof
(补充:这里以使用 mingyuzhu 用户通过 SSH 登录 IP 地址为 10.0.0.1 的服务器,同时当输出的最后的字段是 “password:” 时自动输入 “123” 并回车为例)
代表结束自动交互,就是把控制权交给用户
#!/bin/bash
expect << EOF
spawn ssh mingyuzhu@10.0.0.1
expect "password:" {send "123\r"}
expect ">" {send "\r"}
EOF
或者:
#!/usr/bin/expect
spawn ssh mingyuzhu@10.0.0.1
expect {"password:" {send "123\r"}}
expect eof
(补充:这里以使用 mingyuzhu 用户通过 SSH 登录 IP 地址为 10.0.0.1 的服务器,同时当输出的最后的字段是 “password:” 时自动输入 “123” 并回车为例)
偏移位置变量,默认偏移 1 位,也就是说第 1 个位置变量的值会被第 2 个位置变量的值取代。
如果 shift 后面添加数字,则会直接偏移对应数字个位置。例如 shift 4 则代表直接偏移 4 个位置变量,此时第 1 个位置变量的值会被第 5 个位置变量的值取代。
(注意:shift 不能偏移成负数,且当剩下的位置变量数量不够 shift 偏移时,shift 则不会偏移)
# vim test.sh
创建以下内容:
#!/bin/bash
while [ $# != 0 ];do
echo $1
done
. test.sh a1 b2 c3 d4 e5
a1
a1
a1
a1
a1
a1
......
#!/bin/bash
while [ $# != 0 ];do
echo $1
shift
done
. test.sh a1 b2 c3 d4 e5
a1
b2
c3
d4
e5
# vim test.sh
创建以下内容:
#!/bin/bash
while [ $# != 0 ];do
echo $1
done
. test.sh a1 b2 c3 d4 e5
a1
a1
a1
a1
a1
a1
......
#!/bin/bash
while [ $# != 0 ];do
echo $1
shift 5
done
. test.sh a1 b2 c3 d4 e5
a1