shell基于 /bin/bash 或者 /bin/sh
开头必有 !是告知运行的地方
#!/bin/bash 第二行说脚本是干嘛的
运行方式
chmod 权限 脚本
./ 脚本 、
source 脚本 、
/bin/bash 脚本 -n 为进行脚本测试有无问题 没有输出大概🆗!
sh 脚本
用=赋值变量 字符串加“”号
输出 变量要加 $
$0 为当前程序(脚本)的name
$N为 脚本后跟的第N个参数
$# 脚本加了几个参数
$? 上一条命令是否正确 正确输出0
$* 输出所有参数
&& 上一段命令成功了后在执行小一段
; 不论上一条命令是否成功都执行下一条命令
输出echo带颜色(绿)
echo -e "\033[32m ############### \033[0m" #一行为绿色
echo -e "\033[32m ############### \033[1m" #之后打印都为绿色
shell的if语句
if [ command ];then ((为判断大于小于和整数型的计算))
符合该条件执行的语句 [bash 的内部命令]
elif [ command ];then [[使用[[ ... ]]条件判断结构,而不是[ ... ],能够
防止脚本中的许多逻辑错误。]]
符合该条件执行的语句
else
符合该条件执行的语句
fi
shell的for语句
for i in `seq 1 15`
do
echo "the number $i"
done
--------------------------------------
for ((i=0;i<=100;i++))
do
echo "the number $i"
done
expr 10 + 10
20
seq [选项]... 起始值 增量 结束值
shell的while语句
i=0
while [[ $i < 10 ]]
do
echo "the number $i"
((i++))
done
文件测试运算符
-d file 检测文件是否是目录,如果是,则返回 true。
-f file 检测文件是否是普通文件(既不是目录,也不是设备文件),如果是,则返回 true。
-e file 检测文件(包括目录)是否存在,如果是,则返回 true。
-s file 检测文件是否为空(文件大小是否大于0),不为空返回 true。
-r file 检测文件是否可读,如果是,则返回 true。
-w file 检测文件是否可写,如果是,则返回 true。
-x file 检测文件是否可执行,如果是,则返回 true。
输出日期
echo `date +%Y%m%d` #可以输出年月日
大写的Y输出YYYY 同理其他大写的会更加规范!
小写的Y输出YY
在号 `中的代码会被认为一句指令
expect使用方法
expect中相关命令
-c:从命令行执行expect脚本,默认expect是交互地执行的
spawn:启动新的进程
send:用于向进程发送字符串
expect:从进程接收字符串
interact:允许用户交互,此命令后由用户输入代码
expect eof :等待执行结束,用于执行自动化任务,无需后续继续交互,直接完
exp_contine:继续执行下一个交互
成并退出。
——————————————————————————————————————————————————————————————————————————————————————
格式1:
expect "Name" {send "ftp\n";exp_contine }
格式2:
expect "$case1"
send "$response1\r"
**符号 ASCII码 意义**
\n 10 换行 到行首
\r 13 回车 下移
————————————————————————————————————————————————————————————————————————————————————
**expect 可以有多个分支,就像switch语句一样。**
expect
{
"$case1" {send "$response1\r"}
"$case2" {send "$response2\r"}
"$case3" {send "$response3\r"}
}
示例——————————————————————————————————————————————————————
#!/usr/bin/expect 这是只有expect时
spawn ssh root@10.0.100.203
expect {
"*password" { send "000000\r" }
}
interact
备份数据库
#!/bin/bash
BACKUP_DIR=/tmp/backup/`date +%Y%m%d`
mysqluser=root
mysqlpass=000000
msyqldb=keystone
if [ $UID -ne 0 ];then
echo "sorry u no root!"
exit
fi
if [ ! -d $BACKUP_DIR ];then
mkdir -p $BACKUP_DIR
echo "mkdir $BACKUP_DIR ok !"
else
echo "$BACKUP_DIR ok!!!!"
fi
mysqldump -u$mysqluser -p$mysqlpass -d $msyqldb >$BACKUP_DIR/$msyqldb.sql
if [ $? -eq 0 ];then
echo "ok!!"
fi