Shell脚本

DKing~共享

1.1 脚本概念

将多个命令先放入到一个文件中,方便一次性执行的一个程序文件

统一脚本存放目录:/server/scripts

推荐使用vim编辑脚本

查看脚本执行过程 sh -x 脚本

1.2 脚本编辑格式

#!/bin/bash

#authordqf

#date2018/1/11

#ver1.0

#descbackup /etc to /backup

脚本编辑示例:

#!/bin/bash

#author:dqf

#date:2018/1/11

#ver:1.0

#desc:backup /etc to /backup

cd /

tar zchf /backup/etc-`date +%F-%a-%T`.tar.gz etc/

find /backup/ -type f -mtime +7 ! -name "etc-*-Mon.tar.gz" | xargs mv -t

/tmp

1.3 变量概念

系统中存在的可以随时变化对操作环境有影响的变化的文件

1.        变量分类:

全局变量,又称环境变量,全局都可使用

局部变量,又称普通变量,当前环境使用

2.        赋予变量:

DQF=123(普通变量)

export DQF=123(环境变量)

永久生效放入/etc/profile

source dqf.sh 执行脚本也可以生效

3.        显示变量:

# echo $DQF

123

# echo ${DQF}

123

$DQF==${DQF}

4.        与变量有关的文件

~/.bash_profile  ~/.bashrc      /etc/profile    /etc/bashrc

5.        与变量有关的目录:/etc/profile.d/

实例1-1  cowsay.sh放入到/profile.d/目录下

# /usr/bin/cowsay Hello,World!              写入脚本放入/etc/profile.d/目录

 ______________

< Hello,World! >

 --------------

        \   ^__^

         \  (oo)\_______

            (__)\       )\/\

                ||----w |

                ||     ||

# chmod +x /etc/profile.d/cowsay.sh         赋予执行权限后,开机才能自运行

1.4 $的作用

$ 0         表示脚本的名字

$ 1         表示第一个参数

$ 2         表示第二个参数

$ n        表示第n个参数

$ #         表示脚本的个数

$ ?         表示上一个命令的返回值,判断上一个命令是否执行正确

1.5 [ ]的作用(条件表达式)

[ -d /root ]用于判断根下是否存在目录/root     d表示directory

[ -f /root/oldboy.txt ]用于判断/root下是否存在oldboy.txt文件  f表示file

$ ?         表示上一个命令的返回值,判断上一个命令是否执行正确

0     表示正确            0表示不正确,命令执行有问题

实例1-2  判断系统中 是否存在 /oldboy/oldboydir目录  如果存在提示 dir exist

# [ -d /data ]

# echo $?

0

# [ -d /oldboy/oldboydir ] && echo "dir exist"

dir exist

# [ -f /tmp/ufo.txt  ] ||   touch /tmp/ufo.txt

1.6 比较大小

[ a -eq b ]      equal             ==        表示a=b

[ a -ne b ]      not equal       !=           表示ab

[ a -gt b ]      great than     >            表示a>b

[ a -ge b ]      great equal    >=          表示ab

[ a -lt b ]              less than       <            表示a<b

[ a -le b ]       less equal   <=         表示ab

1.7 if语句

if语句格式-1

if     [ 设定条件 ]then

       执行命令

fi(结束标志)

if语句格式-2

if     [ 设定条件 ]then

       执行命令

else

       执行其他

fi(结束标志)

1.8 for循环

for循环格式:

for   name      in    条件命令

do

       执行命令

done

1.9 脚本案例演示

1.9.1 利用awk制作简单运算器

利用read/awk/if语句编剧脚本

vim /server/scripts/bc.sh

read -t5 -p "input a b:" a b

if [ $b -eq 0 ];then

   echo "b is not allow 0"

   exit

fi

awk -va=$a -vb=$b 'BEGIN{print a+b,a-b,a*b,a/b}'

利用$n/awk/if语句编辑脚本

vim /server/scripts/bc.sh

if [ $# -ne 2 ];then

   echo "Usages:you can only write two words"

   exit

fi

awk -va=$1 -vb=$2 'BEGIN{print a+b"\n"a-b"\n"a*b"\n"a/b}'

1.9.2 利用for语句关闭无用服务

vim /server/scripts/chk.sh

off=`chkconfig |awk '!/crond|network|sshd|rsyslog|sysstat/{print $1}'`

for dqf in $off

do

    chkconfig $dqf off

done

1.9.3 变量赋值方法

方法1-赋值普通变量——重启失效              普通变量不能在脚本中运行

# a=x

# echo $a                                   env     查看系统变量

x

方法2-export赋值环境变量——重启失效       环境变量可以在脚本中运行

# export a=x

# echo $a

x

方法3-read 交互式赋值变量——重启失效

# read -t5 -p "input a b:" a b              -t5 表示5秒后自动退出

input a b:2 3                               -p 表示在屏幕上打印问答内容

# echo $a $b                                -s 表示隐藏输入过程

2 3                                         写入/etc/profile中才能配置永久变量

 

Shell脚本入门基础_Shell