Bash Scripts基础I

来源:互联网 发布:招商银行黄金行情软件 编辑:程序博客网 时间:2024/06/05 11:22

###Bash Scripts基础I###

1.什么是Bash脚本?

· BASH = GNU Bourne-Again Shell,BASH 是 GNU 组织开发和推广的一个项目。

· Bash脚本类似批处理,简单来讲就是把许多的指令集合在一起,并提供循环条件、判断等重要功能,语法简单实用,用以编写程序,大大简化管理员的操作,并可以完成图形工具所无法实现的功能。

2.如何创建一个新的shell脚本?

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

 使文件可执行(使用chmod +x scripts)

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

~/bin – 用于用户的私有程序 
/usr/local/bin – 本地开发、系统上的其他人使用的脚本 
/usr/local/sbin - 本地开发、由root使用的脚本 
直接运行脚本和使用source命令运行脚本是不同的! 
脚本调试模式
!/bin/bash -x 
bash -x scripts 
 
 

3.引用和转义

 引用和转义在shell解析字符串时用于去除字符串中特殊字符或保留词语的特殊含义。这会导致按字面处理字符串,而不是展开变量或将其部分内容视作具有特殊含义。

引用有三种类型:

 

 弱引用 
将字符串放置在双引号中,保留字符串中所有字符的文字值,、‘、 和!字符除外。换言之,变量扩展和命令扩展在双引号内仍起作用。echo“canIhaveaFRUIT” 
echo “The current time is $(date +%r).”

 强引用 
将字符串放置在单引号中,保留字符串中所有字符的文字值,同时禁用所有扩展: 
echo “Make $$$ Fast” 
rm ‘untitled folder’l

 转义 
非引用的\是转义字符。它保留了下一个字符的文字值。(例如,$PATH是确切的字符串$PATH,而不是PATH变量的内容。) 
echo Make \$\$\$ Fast! 
ls untitled\ folder


4.Shell变量

shell变量用于为稍后在脚本中使用的名称指定值,并且仅限于shell命令行或从中声明变量的脚本。

若要定义或指定值
FRUIT=apple 
若要参考或使用变量
FRUIT{FRUIT} 
[root@server0 ~]# FIRST=John

[root@server0 ~]# LAST=Doe

[root@server0 ~]# echo $FIRST $LAST

John Doe

[root@server0 ~]# echo $FIRST_$LAST

Doe

[root@server0 ~]# echo ${FIRST}_$LAST

John_Doe

5.命令替换

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

语法
(shellcommand)示例:

touchdatafile.$(id -un) 
TODAY=$(date +%Y-%m-%d) 

Echo $TODAY

6.算术运算符

算术运算符指的是可以在程序中实现加、减、乘、除等数学运算的运算符。 

operator meaning

<VARIABLE>++ 增量后

<VARIABLE>-- 减量后

- 减法

+ 加法

** 幂运算

* 乘法

/ 除法

% 余数

+= 加等

-= 减等

7.Shell计算命令

<1>用$[]表示数学运算。 

# echo $[1+2]

# a=1; echo $[$[$a+1]*2]
 
<2>用expr表示数学运算。 

# echo `expr 1 + 2`
 
<3>用let指示数学运算。 

# let A=1+2

# echo $A
 
<4>用(())表示数学运算。bash内建功能,效率高。 
 

8.循环

for循环用于值列表中的相同命令的重复。 
[root@server0 ~]# for HOST in host{1..3};do echo $HOST;done

host1

host2

host3

NUM初值为2,步长为2,循环到8 
[root@server0 ~]# for NUM in $(seq 2 2 8);do echo $NUM;done

2

4

6

8 
 9.循环与计算结合:

#!/bin/bash

for ((i=1;i<=100;i++))

do

((j+=i))

#j=`expr $j + $i`

#let j+=i

#j=$[j+=i]

done

echo $j

也可以写成一行:

# for((i=0; i<=100; i++));do j=`expr $j + $i` ;done;echo $j


10.脚本举例

1>输出10以内整除2的数

 

2>检查1到10号主机的开关情况


3>自动创建username文件中用户

cat /mnt/ username

user1

user2

user3


sh create_user.sh username

id user1


4>备份/etc/下*.conf文件到/mnt/下并注明日期

 

5>5s倒计时



6>1分10秒倒计时




7>备份数据库





8>检查ip是否连通


9>检验目录中的文件是否存在

vim /mnt/check_file.sh


sh check_file.sh /mnt