Linux shell 脚本(一)

一、初识脚本

shell:一类介于系统内核与用户之间的解释程序。

脚本:一类使用特定语言,按预设顺序执行的文件

批处理、宏、解释型程序

创建shell脚本

理清任务过程--整理执行语句--完善文件结构

1.任务目标 1.按任务顺序 1.执行环境

2.先做什么 2.必要的结构控制 2.必要的注释信息

3.再做什么 3.如何免交互 3.友好的提示

4.每一步如何实现

例子

1)理清任务过程

1.添加一个名为zhangsan的用户

添加一个名为zhangsan的用户

useradd zhangsan

2.将用户zhangsan的口令设置为123456

passwd zhangsan

2)整理执行语句

useradd zhangsan
echo 123456| passwd --stdin zhangsan

3)完善文件结构

脚本文件:uad.sh

#!/bin/bash
#2015-04-12,by Moon
echo "正在创建用户账号zhangsan..."
useradd zhangsan
echo "正在为用户zhangsan设置密码..."
echo 123456|passwd --stdin zhangsan 
echo "创建成功。"

4)执行shell脚本

方法:

1. chmod +x uad.sh
  ./uad.sh
2.  sh/bash uad.sh
3.  source/. uad.sh

二、shell命令的组合运用

管道操作:将一端的命令输出交给另一端的命令处理 方向:单向

格式:命令1|命令2

例子

1.

find /etc -name "*.conf"  -type f  //查找以.conf结尾的文件
 /etc/autofs_ldap_auth.conf
 .. ..
    find /etc -name "*.conf"  -type f | wc -l   //wc统计 -l按行统计
    308 

2.

ps aux | grep httpd  //gerp 过滤只剩与httpd相关的信息

重定向:改变执行命令时的默认输入、输出

类型 | 操作符 |用途

重定向输入 |< |从指定文件读取数据,而不是从键盘输入

重定向输出 | >、>> |将输出结果覆盖、追加到指定文件

标准错误输出 |2>、2>> |将错误信息覆盖、追加到指定文件

混合输出 |&>、&>> |将标准输出和错误信息覆盖、追加到指定文件

例子

1.

uname -r  //linux 内核版本信息
2.6.18-194.el5
uname -r > version.txt  //版本信息保存到了version.txt

2.

cat version.txt version2.txt
2.6.18-194.el5
cat:version2.txt:没有那个文件或目录

cat version.txt version2.txt 2>error.txt   //把错误信息保存到error.txt中
2.6.18-194.el5
cat error.txt
cat:version2.txt:没有那个文件或目录

逻辑分隔:处理多条命令之间的逻辑关系

逻辑与:&&

逻辑或:||

顺序执行::

例子:

1.

echo "萝卜" && echo "白菜"
萝卜
白菜
echo "萝卜"||echo "白菜"

2.

mkdir /mulu/a  2>/dev/null && echo "成功"
 mkdir /mulu/a  2>/dev/null ||echo "失败"
  失败!

3.

cd /boot/grub:ls -lh grub.comf   //-h意味着便于人操作

三、使用变量

1.变量基本操作

定义与赋值:格式:变量名=变量名

引用变量:格式:$变量名 、${变量名}

例子:

Title = Moon
 echo $Title
 Moon

2、定界符号

双引号、单引号、反撇号

双引号:允许引用,\转义

单引号:禁止引用、转义

反撇号,或者$()

以命令输出进行替换

例子:

1.

echo "$Title group"
 Moon group
 
 echo '$Title group'
 $Title group 

2.

 uname -r 
 2.6.18-194.el5
 
 Ver=`uname -r `
 echo $ver
 2.6.18-194.el5

3.常见的环境变量

用来记录/设置运行参数

系统赋值:USER、LOGNAME、HOME、SHELL、......

用户操作: PATH、LANG、CLASSPATH、.....

例子:

1.

env     #列出所有环境变量
HOSTNAME=pc05.benet.com
SHELL=/bin/bash
HOME=/root
LOGNAM=root
.. ..

2.

echo $USER $HOME SHELL
zhangsan /root SHELL

echo $LANG 
zh_CN.UTF-8

其他特殊变量:

由系统或脚本操控,不可直接赋值:

$?:前一条命令的状态值,0为正常、非0异常

$0:脚本自身的程序名或路径

$1-$9:第一-第九个位置命令的参数

$* :命令行的所有位置参数的内容

$#:命令行的位置参数个数

例子

1.

mkdir  /mulua
echo $?
0

mkdir /mulu/a
mkdir:无法创建目录 “/mulu/a”:没有那个文件或目录
echo $?
1   

2.

cat test.sh
#!/bin/bash
echo “本程序名:$0”
echo "执行时一共输入$#个位置参数"
echo “其中第一个参数是:$1”
echo “所有参数如下:$*”

./test.sh  Hello Everyday!

本程序名:./test.sh

执行时一共输入2个位置参数

其中第一个参数是:Helo

所有参数如下:Hello Everyday!

四、数值运算及处理

1.整数运算操作:

使用expr命令,计算表达式

格式:expr 数值1 操作符 数值2

使用$[]表达式,算式提换

格式:$[数值1 操作符 数值2]

例子:

1.

expr 45+21
66
expr 45-21
23
expr 45\*21  #shell 中 把* 当成通配符,所以应该转义下
945
expr 45/21
2
expr 45%21
3
X=45;Y=21;expr $X-$Y
24

2.

echo $[45+21] 
66
echo $[45*21]
945

X=45;Y=21;echo $[X-Y]
24

2.几个数值处理技巧

变量的递更处理

格式:let 变量名++、 let变量名--

使用随机数

RANDOM 变量

生成数字序列

格式:seq 首数 末数、 seq 首数 增量 末数

例子:

1.

X=45;Y=21
let X++;echo $X
46
let Y--;echo $Y
20 

let X+=2;echo $X 
48

2.

echo $RANDOM      #RANDOM 变量的取值范围为0-32767 
4411
echo $RANDOM
26911


echo $[RANDOM%100]
54
echo $[RANDOM%100]
83

3.
seq 3  #第一个数是从1 开始的 1 可以省略 
1
2
3 

seq 3 5
3 
4 
5 

seq   3  2 10 
3 
5  
7 
9 

小数运行操作:

将表达式给bc命令处理

例子:

echo “45.67-21” | bc
24.62

echo "scale=4;10/3" | bc #通过scale来约束小数位
3.3333

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

扫码关注云+社区

领取腾讯云代金券