脚本

来源:互联网 发布:fl studio 知乎 编辑:程序博客网 时间:2024/05/13 22:01

脚本

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

创建新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  xxdo     xxxdone

例子:倒计时两分钟10秒:


if条件判断语句

if  xxthen    xxxelif  xxxxthen    xxxxxelse    xxxxxxfi


case条件分支语句

例子:数据库自动备份:

#!/bin/bash dir=/backupdbif [ -d $dir ];then   echo "目录已经存在"else   mkdir $dir   echo "$dir 目录创建成功"fi# [ -d $dir] || mkdir $dirfor DB in $(mysql -e "show databases;" -E -N | grep -v '^*' | grep -v 'schema$')doecho "backing up $DB..."dbname=${DB}_$(date +%Y-%m-%d)mysqldump $DB > $dir/$dbnamesize=$(stat --print "%s\n" $dir/$dbname)echo "$dbname $size"done


Test的用法

Test 命令有两种表示方式:

第一种:test 后面直接加参数进行运用第二种:用 [ ] 表示test 进行运用

常用参数选项:



expect语句

用于自动回答安装过程的交互问答.

安装expect:

例子:自动回答建立分区:

第一种,单文件expect:

#!/usr/bin/expectspawn 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

0 0
原创粉丝点击