脚本

脚本

使用一种特定的描述性语言,依据一定的格式编写的可执行文件,又称作宏或批处理文件。

创建新shell脚本

  1. 开头
    创建包含bash命令的文本文件。文件的第一行应为:
    #!/bin/bash

  2. 权限
    文件书写完成后,使文件可执行

    • 赋予可执行的权限 chmod +x
    • 直接指定交互执行方式 sh/bash
  3. 路径自动检测

    将文件放置在用户的$PATH的目录中

    • ~/bin ##用于用户的私有程序
    • /usr/local/bin ##本地开发、系统上的其他人使用的脚本
    • /usr/local/sbin ##本地开发、由root使用的脚本


脚本调试模式

  1. 修改文本
    #!/bin/bash -x

  2. 终端查看
    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

发布了36 篇原创文章 · 获赞 16 · 访问量 7万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章