Linux shell 脚本(一)
一、初识脚本
shell:一类介于系统内核与用户之间的解释程序。脚本:一类使用特定语言,按预设顺序执行的文件
批处理、宏、解释型程序
创建shell脚本:
理清任务过程--整理执行语句--完善文件结构
1.任务目标 1.按任务顺序 1.执行环境
2.先做什么 2.必要的结构控制 2.必要的注释信息
3.再做什么 3.如何免交互 3.友好的提示
4.每一步如何实现
例子:
1)理清任务过程
1.添加一个名为zhangsan的用户
添加一个名为zhangsan的用户
useradd zhangsan
2.将用户zhangsan的口令设置为123456passwd zhangsan
useradd zhangsan
echo 123456| passwd --stdin zhangsan
脚本文件:uad.sh
#!/bin/bash
#2015-04-12,by Moon
echo "正在创建用户账号zhangsan..."
useradd zhangsan
echo "正在为用户zhangsan设置密码..."
echo 123456|passwd --stdin zhangsan
echo "创建成功。"
方法: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.el5uname -r > version.txt //版本信息保存到了version.txt
2.
cat version.txt version2.txt
2.6.18-194.el5cat: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 $TitleMoon
2、定界符号
双引号、单引号、反撇号
双引号:允许引用,\转义
单引号:禁止引用、转义
反撇号,或者$()
以命令输出进行替换
例子:
1.
echo "$Title group"
Moon group
echo ‘$Title group‘
$Title group
2.
uname -r
2.6.18-194.el5Ver=`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/bashecho “本程序名:$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
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。