unit10-Bash scripts 1

来源:互联网 发布:网络运维 英文缩写 编辑:程序博客网 时间:2024/06/07 05:47

第十单元--Bash scripts 1


如何创建新shell脚本?

1. 创建包含bash命令的文本文件。文件的第一行应为:
#!/bin/bash
2. 使文件可执行(使用chmod +x scripts)
3. 运行脚本
1>将脚本放置在用户的$PATH的目录中,可直接输入脚本名称即可运行
 ~/bin – 用于用户的私有程序
 /usr/local/bin – 本地开发、系统上的其他人使用的脚本
 /usr/local/sbin - 本地开发、由root使用的脚本
2>sh 脚本绝对路径  【加参数 -x 代表执行时跟踪命令,显示每条指令的运行过程】
如:sh /mnt/test.sh

脚本用法:

一、引用和转义

1.弱引用
将字符串放置在双引号中,保留字符串中所有字符的文字值,$、`、\和!字符除外。换言之,变量
扩展和命令扩展在双引号内仍起作用
[kiosk@foundation98 Desktop]$ echo "date"
date
[kiosk@foundation98 Desktop]$ echo "`date`"
Wed Jun 14 09:08:37 CST 2017
[kiosk@foundation98 Desktop]$ a=8
[kiosk@foundation98 Desktop]$ echo "$a"
8
[kiosk@foundation98 Desktop]$ echo "!$a"
echo ""\$a"a"
$aa

2.强引用
将字符串放置在单引号中,保留字符串中所有字符的文字值,同时禁用所有扩展
[kiosk@foundation98 Desktop]$ echo "date"
date
[kiosk@foundation98 Desktop]$ echo "`date`"
Wed Jun 14 09:08:37 CST 2017
[kiosk@foundation98 Desktop]$ a=8
[kiosk@foundation98 Desktop]$ echo "$a"
8
[kiosk@foundation98 Desktop]$ echo "!$a"
echo ""\$a"a"
$aa

3.转义
非引用的\是转义字符。它保留了下一个字符的文字值。
[kiosk@foundation98 Desktop]$ echo "\$a"
$a
[kiosk@foundation98 Desktop]$ echo "\$a"
$a

二、指定和使用变量


shell变量用于为稍后在脚本中使用的名称指定值,并且仅限于shell命令行或从中声明变量的脚本。
1.若要定义或指定值:
FRUIT=apple

2.若要参考或使用变量:
$FRUIT
${FRUIT}
[kiosk@foundation98 Desktop]$ FRUIT=apple
[kiosk@foundation98 Desktop]$ echo $FRUIT
apple
[kiosk@foundation98 Desktop]$ echo ${FRUIT}
apple
[kiosk@foundation98 Desktop]$ a=8
[kiosk@foundation98 Desktop]$ echo $FRUIT $a
apple 8
[kiosk@foundation98 Desktop]$ echo $FRUIT-$a
apple-8
[kiosk@foundation98 Desktop]$ echo $FRUIT_$a
8
[kiosk@foundation98 Desktop]$ echo ${FRUIT}_$a
apple_8

三、命令替换


命令替换在子shell中执行指定命令并用命令输出替换脚本中的命令替换。
[kiosk@foundation98 Desktop]$ DIR=$(ls -l /opt )
[kiosk@foundation98 Desktop]$ echo $DIR
total 0 drwxr-xr-x 3 root root 23 Apr 15 19:42 kingsoft drwxr-xr-x. 2 root root 6 Mar 9 2015 rh

四、算术运算符

<VARIABLE>++     增量后
<VARIABLE>--     减量后
-        减法
+        加法
**        幂运算
*        乘法
/        除法
%        余数
+=        加等
-=        减等

Shell计算命令:
1.用$[]表示数学运算
[kiosk@foundation98 Desktop]$ a=1
[kiosk@foundation98 Desktop]$ b=2
[kiosk@foundation98 Desktop]$ echo $[$a+$b]
3
[kiosk@foundation98 Desktop]$ echo $[1+2]
3

2.用expr表示数学运算
[kiosk@foundation98 Desktop]$ echo `expr 1+2`
1+2
[kiosk@foundation98 Desktop]$ echo `expr 1 + 2  ##需要用空格隔开`
3

3.用let指示数学运算
[kiosk@foundation98 Desktop]$ let A=1+2
[kiosk@foundation98 Desktop]$ echo $A
3

4.用(())表示数学运算,常用于脚本中与循环结合
#!/bin/bash
for ((i=1;i<10;i++))
do
((j+=i))
done
echo $j

五、循环

for循环用于值列表中的相同命令的重复
[kiosk@foundation98 Desktop]$ for HOST in host{1..3}; do echo $HOST ; done
host1
host2
host3
[kiosk@foundation98 Desktop]$ for HOST in $(seq 2 2 8); do echo $HOST ; done
2
4
6
8
[kiosk@foundation98 Desktop]$

###  练习题目  ###

备份数据库
#!/bin/bash
for DIR in `mysql -uroot -predhat -e  "show databases;" -N -E | grep -E "\*|schema$" -v`
do
        echo "Backing up $DIR"
        mysqldump -uroot -predhat  $DIR > /mnt/${DIR}-`date +%Y-%m-%d-%S`.dump
done

for DBDIR in $(/mnt/${DIR}*.dump)
do
        SIZE=`stat --printf "%s\n" $DBDIR`
        echo "$DBDIR $SIZE"
done

示图:执行结果


原创粉丝点击