一、初识脚本

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 脚本(一)的更多相关文章

  1. Linux shell脚本编程(三)

    Linux shell脚本编程 流程控制: 循环语句:for,while,until while循环: while CONDITION; do 循环体 done 进入条件:当CONDITION为“真” ...

  2. Linux shell脚本编程(二)

    Linux shell脚本编程(二) 练习:求100以内所有偶数之和; 使用至少三种方法实现; 示例1: #!/bin/bash # declare -i sum=0 #声明一个变量求和,初始值为0 ...

  3. Linux shell脚本编程(一)

    Linux shell脚本编程: 守护进程,服务进程:启动?开机时自动启动: 交互式进程:shell应用程序 广义:GUI,CLI GUI: CLI: 词法分析:命令,选项,参数 内建命令: 外部命令 ...

  4. Linux Shell 脚本入门

    linux shell 脚本格式 #!/bin/sh#..... (注释)命令...命令... 使用vi 创建完成之后需设置权限 chmod +x filename.sh 执行命令: ./filena ...

  5. Linux Shell脚本入门--cut命令

    Linux Shell脚本入门--cut命令 cut cut 命令可以从一个文本文件或者文本流中提取文本列. cut语法 [root@www ~]# cut -d'分隔字符' -f fields &l ...

  6. Linux Shell脚本攻略 读书笔记

    Linux Shell脚本攻略 读书笔记 这是一本小书,总共253页,但内容却很丰富,书中的示例小巧而实用,对我这样总是在shell门前徘徊的人来说真是如获至宝:最有价值的当属文本处理,对这块我单独整 ...

  7. 阿里Linux Shell脚本面试25个经典问答

    转载: 阿里Linux Shell脚本面试25个经典问答 Q:1 Shell脚本是什么.它是必需的吗? 答:一个Shell脚本是一个文本文件,包含一个或多个命令.作为系统管理员,我们经常需要使用多个命 ...

  8. Linux Shell脚本教程

    v\:* {behavior:url(#default#VML);} o\:* {behavior:url(#default#VML);} w\:* {behavior:url(#default#VM ...

  9. Linux shell 脚本攻略之统计文件的行数、单词数和字符数

    摘自:<Linux shell 脚本攻略>

  10. Linux shell 脚本攻略之创建不可修改文件

    摘自:<Linux shell 脚本攻略>

随机推荐

  1. html2canvas在微信中无法使用

    html2canvas: https://github.com/niklasvh/html2canvas 本来想在微信网页中使用html2canvas生成图片,结果死活不行 测试发现在Chrome,手 ...

  2. Dubbo广播模式下报错:Can't assign requested address解决办法

    原因: 尝试使用Dubbo的multicast模式,发现一运行就报Can't assign requested address的错误,造成这种原因的主要是系统中开启了IPV6协议(比如window7) ...

  3. 基于WebSocketSharp 的IM 简单实现

    websocket-sharp 是一个websocket的C#实现,支持.net 3.5及以上来开发服务端或者客户端.本文主要介绍用websocket-sharp来做服务端.JavaScript做客户 ...

  4. Yii中DataProvider的使用

    1,DataProvider 什么是数据提供者 数据提供者可以获取数据,并提供给其他组件或页面使用 可以获得列的数据进行分页和排序 经常用来给数据小部件提供数据,方便用户互动地进行数据的分页与排序 实 ...

  5. nyoj940 A dp problem 打表

    首先枚举i,那么构成i^2的最小值为1个正方形,当然1~1000并不会都得到答案,那么剩下的数字就递增枚举这些数,这个数可能右多对数构成,则枚举这些数.例如 5 = 1 + 4, 5 = 2 + 3, ...

  6. python批量修改文件内容及文件编码方式的处理

    最近公司在做tfs迁移,后面要用新的ip地址去访问tfs 拉取代码  ,所以原来发布脚本中.bat类型的脚本中的的ip地址需要更换 简单说下我们发布脚本层级目录 :每个服务站点下都会有一个发布脚本 . ...

  7. python中 字符 字典 列表之间的转换

    1 字典 转 字符 定义一个字典:dict = {'name': 'python', 'age': 7}字典转字符 可以使用str强制转换 如: str(dict) 此时dict的类型就是字符型了 2 ...

  8. MySQL InnoDB表压缩

    MySQL InnoDB表压缩 文件大小减小(可达50%以上) ==> 查询速度变快(count * 约减少20%以上时间) 如何设置mysql innodb 表的压缩: 第一,mysql的版本 ...

  9. 自动提取文章摘要AutoSummary

    在文本搜索引擎项目中,需要对已排序的文章进行摘要提取,然后与标题,路径一起封装成Json数据返回客户端.因此这里我自己写一个自动摘要,来大概完成这个任务.在自动摘要提取过程中,使用了一个分词库:Cpp ...

  10. 关于Maven的web项目的创建

    网上关于Maven的web项目创建多种多样,先本人在研究Maven之余,创建一套自己试过并有效的创建步骤. 1.点击右键>选择Maven Project,如下图所示: 2.点击创建,如下图所示: ...