linux学习 shell脚本

来源:互联网 发布:arrayslice php 编辑:程序博客网 时间:2024/06/05 17:14

shell脚本

一、脚本

1.脚本:记录命令

2.shell:linux中的解释器,将命令解释给内核。所以shell脚本只能在shell中运行。

二、.脚本创建及编写格式如下:

1. vim 文件名.sh

编辑内容:

 #!/bin/bash   ##表示以下所有内容的解释器是/bin/bash

   命令

  :wq

2.chmod +x  文件名.sh     ##给执行权限

3.sh 文件名.sh            ##以绝对路径执行脚本,sh  指定执行器是/bin/bash

  文件名.sh                ##执行脚本

4.sh  -x  文件名.sh        ##调试

  或在脚本中如下格式进行编辑:

 #!/bin/bash  -x

5.ps  f           ##可以查看使用的解释器


三、批处理

1.定义变量:用一个固定字符表示不度固定的值。

  如:a=1;则$a表示变量

 $       ##表示取值

 `  `    ##表示先执行该命令

 \       ##转义单个字符

       如:\$a    ##此处的$只表示字符$

  ''     ##转义所有字符

 " "     ##弱转义,不能转义!,$,\,`,即该变量扩展和命令扩展在""内仍是起作用的

注:""及' '分布采取就近原则,即与距离最近的构成以对""或''

2.循环定义变量,格式如下:

for NUM  in  1 hello  2  westos 3  redhat;

##变量NUM依次=1  hello 2  westos  3 redhat


for NUM  in  {1..10}

##连续定义变量NUM



for NUM  in  `seq 1  2  10` 

##间断定义变量NUM ,从1定义到10,每2个定义一次

for NUM  in  `seq  2  2  10`

##间断定义变量NUM ,从2定义到10,每2个定义一次

3.命令替换

命令替换在子shell中执行指定命令并用命令输出替换脚本中的命令替换

例:编辑脚本,将/etc/*.conf文件拷贝至/mnt/replace,且有时间戳



4.shell计算命令

[ 算式 ]  如:[ 2 + 3 ]

-  ##减法;+  ##加法;**  ##幂运算;*   ##乘法运算;

/  ##除法运算;%   ##取余运算

++   ##自加运算;   --   ##自减运算

例:

expr 算式 

如:expr  2 + 3

  expr  2 '*' 3    ##乘法运算

注:expr不能使用’**’即幂运算

例:

let a=算式   ##定义变量,直接计算

echo $a     ##显示变量

例:

四、while...do语句

例:编写脚本,实现倒计时1分10秒

五、编辑脚本--备份数据库,显示备份的文件大小及时间戳

#!/bin/bash

BACKUP=mariadb-`date +%Y-%m-%d-%s`

touch /mnt/$BACKUP     ##创建带有时间戳的文件

for DB in `mysql -uroot -e "showdatabases;" -E -N | grep -E '\*|schema&' -v`

##定义变量

       do

       echo "Backing up $DB"

       mysqldump $DB > /mnt/$BACKUP

       done

for DBNAME in `ls /mnt/DB_BACK/*`

       do

       SIZE=`stat --print "%s\n" $DBNAME`

       echo ${DBNAME}\'s size is $SIZE byte

       done

六、位置参数

1.位置参数:脚本以外且未在脚本名中出现的其他字符

2.read:交互式定义参数值

  格式:read  参数名  [enter]

     参数值    [enter]

    read  -p  "提示语"  -s  参数名  [enter]

     参数值    [enter]

     ##-p表示可以有提示语;-s表示不换行


3.用位置参数来传递给脚本的命令参数或选项输入,各种特殊变量存储传递的选项编号

指定的位置参数总数:$#

位置参数自身:$0、$1、..

所有位置参数:$@、$*

例:编辑脚本,实现ping 命令,当未指定IP时,应有提示语

#!/bin/bash

while  [  "$#" -eq  "0" ]

       do

       echo "please give me an ip address!"

       break

       Done

##当位置参数总数=0时表示没有指定IP,则提示给IP

while  [  "$#" -gt  "0"  ]

       do

       ping -c 1 $1 >/dev/null && echo "$! is up" || echo"$1 is down"

当可以ping通时则输出该IP is  up ,若不能ping 通则输出该IP  is down

       break

       done


七、test条件判断

1.test命令可用于评估bash脚本中的表达式。如果表达式返回值得为true,返回零退出状态;如果表达式为false,则返回值非零退出状态。

2.格式如下:

 test  表达式

 test  [表达式]


3.字符串比较运算符:=、!=

数学比较运算:    -eq  ##等于

              -ne  ##不等于

              -lt  ##小于

              -le  ##小于等于

              -gt  ##大于

              -ge  ##大于等于

              -n   ##不为空时

              -z   ##为空时

如:["a" -eq "0" ]    ##判断a是否等于0

   [-z  "a"]          ##当a不为空时,则成立

4.文件状态运算符

test -e  文件    ##检测文件收否存在  

       -b  文件    ##文件类型是否时块类型

       -c           ##是否是字符类型

       -d       ##是否是目录

       -f         ##是否是普通文件

       -S         ##是否是套接字文件

       -L       ##是否是链接文件

例:编辑脚本,检测指定文件类型


例:编辑脚本,执行后可以自动建立/mnt/user中的用户



例:编辑脚本,输入delete时,删除指定文件中的用户名;输入create时,创建指定文件中的用户




八、自动应答问题软件expect

expect软件可以实现交互,但不是shell

其执行器/usr/bin/expect

执行脚本:文件名.exp

脚本内容格式:

       #!/usr/bin/expect

       spawn  /mnt/ask.sh      ##监视脚本/mnt/ask.sh,或者监控某命令

       expect  "who"          ##遇到“who”字符

       send  "bai\r"             ##则自动输入“bai”,且自动回车

       ...

       expecteof                   ##自动退出

       :wq

expect 文件名.exp           ##执行脚本

interact   ##执行完成后保持交互状态,即不立即退出,需手动退出

$argv 参数数组     ##expect脚本可以接受从bash传递过来的参数,可以使用[lindex  $argv n ]获得,n从0开始,分别表示第一个,第二个..参数



例:自动远程登录指定IP 的主机



再次远程连接172.25.254.90主机,将不能完成自动登录,因为无“yes/no”环节

编写程序如下:

#!/usr/bin/expect

set ip [ lindex $argv 0]

spawn ssh root@$ip

expect {

       "yes/no" {send "yes\r";exp_continue}    ##若有该问题则回答,若没有则跳过回答

       "password:" {send "westos\r"}

       }

interact

自动显示远程登录主机的主机名



八、环境变量

1.在shell中定义变量,只针对所打开的shell生效--环境级变量

2.在用户家目录中声明变量,只对当前用户生效--用户级

3.在/etc/profile中声明变量,对任何用户均可生效--系统级变量

声明变量格式:

       export  变量名=值

刷新文件,使声明变量生效:source  文件名



原创粉丝点击