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
Linux shell 脚本(一)的更多相关文章
- Linux shell脚本编程(三)
Linux shell脚本编程 流程控制: 循环语句:for,while,until while循环: while CONDITION; do 循环体 done 进入条件:当CONDITION为“真” ...
- Linux shell脚本编程(二)
Linux shell脚本编程(二) 练习:求100以内所有偶数之和; 使用至少三种方法实现; 示例1: #!/bin/bash # declare -i sum=0 #声明一个变量求和,初始值为0 ...
- Linux shell脚本编程(一)
Linux shell脚本编程: 守护进程,服务进程:启动?开机时自动启动: 交互式进程:shell应用程序 广义:GUI,CLI GUI: CLI: 词法分析:命令,选项,参数 内建命令: 外部命令 ...
- Linux Shell 脚本入门
linux shell 脚本格式 #!/bin/sh#..... (注释)命令...命令... 使用vi 创建完成之后需设置权限 chmod +x filename.sh 执行命令: ./filena ...
- Linux Shell脚本入门--cut命令
Linux Shell脚本入门--cut命令 cut cut 命令可以从一个文本文件或者文本流中提取文本列. cut语法 [root@www ~]# cut -d'分隔字符' -f fields &l ...
- Linux Shell脚本攻略 读书笔记
Linux Shell脚本攻略 读书笔记 这是一本小书,总共253页,但内容却很丰富,书中的示例小巧而实用,对我这样总是在shell门前徘徊的人来说真是如获至宝:最有价值的当属文本处理,对这块我单独整 ...
- 阿里Linux Shell脚本面试25个经典问答
转载: 阿里Linux Shell脚本面试25个经典问答 Q:1 Shell脚本是什么.它是必需的吗? 答:一个Shell脚本是一个文本文件,包含一个或多个命令.作为系统管理员,我们经常需要使用多个命 ...
- Linux Shell脚本教程
v\:* {behavior:url(#default#VML);} o\:* {behavior:url(#default#VML);} w\:* {behavior:url(#default#VM ...
- Linux shell 脚本攻略之统计文件的行数、单词数和字符数
摘自:<Linux shell 脚本攻略>
- Linux shell 脚本攻略之创建不可修改文件
摘自:<Linux shell 脚本攻略>
随机推荐
- kvm的安装使用技巧
KVM参考网址 http://www.server110.com/kvm/201403/8321.html http://www.2cto.com/os/201511/451650.html http ...
- 对于ArrayList中的泛型进行分析
package cn.lonecloud.reflect; import java.lang.reflect.Method; import java.util.ArrayList; public cl ...
- LNMP Yii2 验证码不显示问题最终解决方案
首先,本地使用OK! 然后,新配置的LNMP环境,验证码一直显示不出来,看了Yii2的验证码存在session里,怀疑是session有问题. 在测试其他页面的时候,发现:session_start( ...
- iOS应用如何得知用户有新拍的图片?
首先,应用要知道图片库中的新图片,最重要是要有图片库的访问权限.然后每张图片除了图片本身的构成要素(像素)外,还会保存图片的拍摄时间(时间戳),地点等相关信息.时间戳就是判断新拍照片的最主要依据.
- DLL文件修复
当你在Windows计算机中安装非操作系统的软件时,往往会覆盖或改写系统共享文件, 如动态链接库(.dll文件)和可执行文件(.exe文件). * 对于Windows系统来说,当用户操作不当(如非正常 ...
- 【剑指offer】04替换空格,C++实现
0.前言 # 替换空格为字符串部分的题目,剑指offer中字符串系列的文章地址,剑指offer全系列文章地址 1.题目 # 请实现一个函数,将一个字符串中的空格替换成"%20".例 ...
- Linux中文件夹的文件按照时间倒序或者升序排列
1.按照时间升序 命令:ls -lrt 详细解释: -l use a long listing format 以长列表方式显示(详细信息方式) -t sort by modification time ...
- python file文件操作--内置对象open
说明: 1. 函数功能打开一个文件,返回一个文件读写对象,然后可以对文件进行相应读写操作. 2. file参数表示的需要打开文件的相对路径(当前工作目录)或者一个绝对路径,当传入路径不存在此文件会报错 ...
- csrf
什么是CSRF: CSRF(Cross-site request forgery),中文名称:跨站请求伪造 攻击者盗用了你的身份,以你的名义发送恶意请求.CSRF能够做的事情包括:以你名义发送邮件,发 ...
- linux内核升级(ubuntu12.04从3.13.0升级到3.4.0 )
花了一天的时间,终于把ubuntu12.04 的linux内核版本从3.13.0升级到3.4.0 升级后,系统更加稳定.具体步骤:# wget http://www.kernel.org/pub/li ...