脚本
使用一种特定的描述性语言,依据一定的格式编写的可执行文件,又称作宏或批处理文件。
创建新shell脚本
开头
创建包含bash命令的文本文件。文件的第一行应为:
#!/bin/bash
权限
文件书写完成后,使文件可执行- 赋予可执行的权限 chmod +x
- 直接指定交互执行方式 sh/bash
路径自动检测
将文件放置在用户的$PATH的目录中
- ~/bin ##用于用户的私有程序
- /usr/local/bin ##本地开发、系统上的其他人使用的脚本
- /usr/local/sbin ##本地开发、由root使用的脚本
脚本调试模式
修改文本
#!/bin/bash -x
终端查看
bash -x scripts
引用和转义
引用和转义在shell解析字符串时用于去除字符串中特殊字符或保留词语的特殊含义。这会导致按字面处理字符串,而不是展开变量或将其部分内容视作具有特殊含义。
- 引用
弱引用 (“”)
将字符串放置在双引号中,保留字符串中所有字符的文字值,$、`、\和!字符除外。换言之,变量
扩展和命令扩展在双引号内仍起作用。
echo “can I have a $FRUIT”
echo “The current time is $(date +%r).”
强引用 (‘’)
将字符串放置在单引号中,保留字符串中所有字符的文字值,同时禁用所有扩展:
echo “Make $$$ Fast”
rm 'untitled folder'
- 转义
非引用的\是转义字符。它保留了下一个字符的文字值。(例如,$PATH是确切的字符串$PATH,而不是PATH变量的内容。)
echo Make \$\$\$ Fast!
ls untitled\ folder
例子:
运行:
Shell变量
shell变量用于为稍后在脚本中使用的名称指定值,并且仅限于shell命令行或从中声明变量的脚本。
- 变量的使用
若要定义或指定值:
FRUIT=apple
若要参考或使用变量:
$FRUIT
${FRUIT} ##两者同意思,第二个后面可以紧接着字符
- 常用shell默认变量:
$0 =>shell名称
$1 =>脚本参数的第一个参数
$? =>上一个命令执行的返回码(或者叫返回状态),0为正常,其他为有错
$# =>传递到脚本的的参数的总个数
$*/$@ =>表示所有的命令参数
“$*”=>将所有的参数当作一行字符串
“$@”=>将但各参数视为一个单独字符串
$$ =>当前shell进程编号
$HOME =>登陆目录
$PWD =>当前工作目录
注:返回状态的分类:
算术运算
$ [ 数1 运算符 数2 ] ##注意在括号两边 要有空格进行隔开或者直接是两对括号(())
注意:单一个等号表示赋值,也可以在前面添加let 来进行附值。
例子:倒计时10秒:
语句
for循环语法
for
Xx in xxx
Xx in $( seq 起始位置 步长 结束位置)
do
done
for循环语法
while xx
do
xxx
done
例子:倒计时两分钟10秒:
if条件判断语句
if xx
then
xxx
elif xxxx
then
xxxxx
else
xxxxxx
fi
case条件分支语句
例子:数据库自动备份:
#!/bin/bash
dir=/backupdb
if [ -d $dir ];then
echo "目录已经存在"
else
mkdir $dir
echo "$dir 目录创建成功"
fi
# [ -d $dir] || mkdir $dir
for DB in $(mysql -e "show databases;" -E -N | grep -v '^*' | grep -v 'schema$')
do
echo "backing up $DB..."
dbname=${DB}_$(date +%Y-%m-%d)
mysqldump $DB > $dir/$dbname
size=$(stat --print "%s\n" $dir/$dbname)
echo "$dbname $size"
done
Test的用法
Test 命令有两种表示方式:
第一种:test 后面直接加参数进行运用
第二种:用 [ ] 表示test 进行运用
常用参数选项:
expect语句
用于自动回答安装过程的交互问答.
安装expect:
例子:自动回答建立分区:
第一种,单文件expect:
#!/usr/bin/expect
spawn fdisk /dev/vdb ##执行的主要命令
expect "Command (m for help)" ##预期问题的预期关键字
send "n\r" ##发送回答
expect "Select (default p):"
send "p\r"
expect "Partition number "
send "1\r"
expect "First sector"
send "\r"
expect "Last sector, +sectors or +size{K,M,G"
send "+512M\r"
expect "Command (m for help)"
send "wq\r"
expect eof
第二种,嵌入expect:
all