第27课-Shell脚本高级编程

28.1 什么是脚本

脚本是一个包含一系列命令序列文本文件(可以通过编辑器进行编辑,而且可以执行)。当运行这个脚本文件时,文件中包含的命令序列将得到自动执行。例如我们创建7个文件,可以不断的创建7个文件,也可以通过一个脚本文件(.sh文件)来创建。

28.2 脚本编程技术

1. 基本结构

(1)解析器:#!后面的部分,表示该脚本用哪个解析器来操作;

(2)命令序列:由众多的命令组成。

2. 变量

shell脚本允许用户设置和使用自己的变量,变量可以使数字或者字符串,用户无需指定其类型,也无需在使用前定义。赋值号的左右两边不用空格,注释用#开头。

#!/bin/sh

a=”hello world”

b=5

echo “A is: $a”

echo “B is %b”

注:在运行该程序之前我们会发现有错,是因为我们使用的是windows下的文件和linux下的文件不同。所以,我们通过dos2unix shell.sh进行转换。我们在转换之前要安装相应的rpm包。

3. 参数

同C程序一样,shell脚本中可以使用命令行参数

$#:传入脚本的命令行参数个数

$*:所有命令行参数值,在各个参数值之间留有空格

$0:命令本身(shell本身)

$1:第一个命令行参数

$2:第二个命令行参数

例如:

#2.3

echo "number of var:" $#

echo "value of vars" $*

echo "name of script" $0

echo "value of var1" $1

echo "value of var2" $2

我们输入命令./shell.sh a 3后,显示的是

number of var:2

value of vars a 3

name of script ./shell.sh

value of var1 a

value of var2 3

4. 数字计算

shell脚本提供了一个专门的命令expr来计算数学表达式,例如expre 5 + 1,但是当要把计算的结果复制给其他变量的时候,还必须使用反引号。~线下面的符号就是`

var = `expr 20/10`

例如:

#2.4

var1=10

var2=20

var3=`expr $var1 / $var2`

var4=`expr $var1 + $var2`

echo $var3

echo $var4

运行结果:0

30

5. 流程控制

(1)shell脚本中最基本的流程控制语句就是if-then,使用格式:

if[ condition ](特别提醒:方括号左右两边必须有空格)

then

commands

else

commands

fi

l  条件比较

比较操作

整数操作

字符串操作

相同

-eq

=

不同

-ne

!=

大于

-gt

>

小于

-lt

<

大于或等于

-ge

小于或等于

-le

为空

-z

不为空

-n

例:

比较整数a和b是否相等:if [ $a = $b](也可用eq)

判断整数a是否大于整数b:if [ $a -gt $b]

比较字符串a和b是否相等:if [ $a = $b]

判断字符串a是否为空:if [ -z $a]

判断整数变量a是否大于b:if [ $a -gt $b]

注意:

l  在括号的左右都留有空格

l  “=”左右都有空格

针对文件目录的

-e 文件已经存在

-f 文件是普通文件

-s 文件大小不为零

-d 文件是一个目录

-r 文件对当前用户可以读取

-w 文件对当前用户可以写入

-x 文件对当前用户可以执行

#!/bin/sh

folder=/home

[ -r “$folder” ] && echo “Can read $folder”   当前面条件为真的时候执行后面的操作

[ -f “$folder” ] || echo “this is not file”       当前面的条件为假的时候执行后面的操作

例:

var=10

if [ $var -gt 5 ]

then

echo "the value is qreater then 5"

fi

运行结果:the value is qreater then 5

(2)for语句

shell脚本提供了for语句,用于创建类似于c语言编程中for语句一样的循环。使用格式:

for var in list

do

commands

done

例:

#!/bin/bash

list="Sun Mon Tue Wed Thur Fri Sat"

for day in $list

do

echo $day

done

运行结果:

Sun

Mon

Tue

Wed

Thur

Fri

Sat

(3)while语句

shell脚本提供了while语句,用于创建类似于c语言编程中while语句一样的循环。使用格式:

while condition

do

commands

done

例:

#!/bin/bash

var=5

while [ $var -gt 0 ]

do

echo $var

var=`expr $var - 1`

done

运行结果:

5

4

3

2

1

6. sed编辑器

Sed(Stream Editior):流式编辑器又名(hang)编辑器,每次只编辑一行,格式如下:

sed [操作选项] ‘命令’ 文件名

常用操作选项:

-n:指定处理后只显示该行

-e:进行多项编辑任务

-i:直接修改读取的文件内容,而不是由屏幕输出

l  常用命令选项:

p       打印匹配行

a       新增

c       替代一行

d       删除定位行

s        代替一行中的某些部分

l  sed范例

这些修改除了加-i都是对原文件没有影响的。

(1)显示

sed -n ‘2p’ tmp.txt 只显示第2行

sed -n ‘1,3p’ tmp.txt 打印第1行到第3行-F

sed -n ‘/mov/’p tmp.txt 打印含movie的行

(2)删除

sed ‘2d’ tmp.txt 删除第2行(会打印出来剩下的部分)

sed ‘3,$d’ tmp.txt 删除第3行到最后一行,$:最后一行

(3)查询

sed -n ‘/hello/p’ tmp.txt 查询包括关键字hello的所有行

(4)代替

sed ‘1c Hi’ tmp.txt 第1行代替为Hi

sed -n ‘/hello/p’ tmp.txt |sed ‘sed ‘s/hello/bird/g’

(5)插入

sed -i ‘$a bye’ tmp.txt 在最后一行插入bye

7. awk分析器

awk是一个强大的文本分析工具,它把文件逐行的读入,以空格为默认分隔符将每行分割为多个字段。

使用方式:awk  ‘{pattern + action}' filenames

pattern 要查找的内容

action 找到匹配内容时所执行的命令

范例:

last -n 5|awk  ‘{print $1}’      last -n 5表示最近登陆的5个用户。

cat /etc/passwd | awk -F ‘:’ ‘{print $1}’      -F表示指定分隔符

awk –F  ‘:’  ‘$1==”root” {print $0}’ /etc/passwd

28.3 综合实例

qcd分析

qcd.sh

qcd ()

{

mkdir -p /.qcd/tmp

[ -x /.qcd/tmp/qcd_tmp ] || touch /.qcd/tmp/qcd_tmp

chmod 700 /.qcd/tmp

QD=/.qcd/tmp/qcd_tmp

export QD

/usr/local/sbin/qcde "$@"

[ ! `cat $QD` ] || cd "`cat $QD`"

rm -f "$QD"

unset QD;

}

install

#!/bin/sh

#qcd install

#written by xiewei 2004

setup_content=/etc/qcd

history_dir=$setup_content/history_dir

bin_content=/usr/local/sbin

prof_content=/etc/profile.d

setup()

{

#check

if [ -r $history_dir ]      #如果$history_dir 对当前用户可读

then

echo -n "You have installed qcd , overwrite it(y\Y or q\Q or n\N)? "

while read choice

do

if [ "$choice" = "y"  -o  "$choice" = "Y" ] #要改写安装路径

then

break

fi

if [ "$choice" = "q"  -o  "$choice" = "Q" ]  #什么也不做退出

then

echo "Nothing to do!"

exit 1

fi

if [ "$choice" = "n"  -o  "$choice" = "N" ]  #安装到默认的位置

then

cp -f ./qcd $bin_content/

cp -f ./qcd.sh $prof_content/

echo "install qcd OK, but do not overwrite it!"

echo "version is 1.00"

exit 1

fi

echo -n "You have installed qcd, overwrite it(y\Y or q\Q or n\N)? "

done

fi

if [ -r $setup_content ]

then

:

else

mkdir $setup_content

fi

cp -f ./qcde $bin_content/

cp -f ./history_dir $setup_content/

cp -f ./qcd.sh $prof_content/

}

delete()

{

[ -r $history_dir ] || [ -r $bin_content ] || \

! echo "Your computer has not qcd!" || ! echo "Nothing to do!"

echo -n "Are you sure to delete qcd(y\Y or q\Q)? "

while read choice

do

if [ "$choice" = "y"  -o  "$choice" = "Y" ]

then

break

fi

if [ "$choice" = "q"  -o  "$choice" = "Q" ]

then

echo "Nothing to do!"

exit 1

fi

echo -n "Are you sure to delete qcd(y\Y or q\Q)? "

done

rm -rf $setup_content

rm -f  $bin_content/qcd

rm -f  $prof_content/qcd.sh

}

usage()

{

echo "<install> install qcd on your computer."

echo "<install del> delete qcd from your computer."

exit 1

}

echo "Qcd Install Software"

echo "Written By XieWei 2004"

if [ $# -eq 0 ]    #如果传入的参数个数为0?then

setup

echo "install qcd OK!"

echo "version is 1.00"

exit 1

fi

if [ $# -gt 1 ]    #如果传入的参数个数大于0

then

usage

fi

case $1 in        #如果传入的第一个参数是del

del)

delete

echo "have delete qcd OK!"

;;

*)

usage    #提示信息

;;

esac

转载于:https://www.cnblogs.com/free-1122/p/11360182.html

第三季-第27课-Shell脚本高级编程相关推荐

  1. 第七课 Shell脚本编程-大型脚本工具开发实战

    第七课 Shell脚本编程-大型脚本工具开发实战 文章目录 第七课 Shell脚本编程-大型脚本工具开发实战 第一节 需求描述 第二节 脚本的特殊参数 第三节 功能函数的实现 第四节 程序主流程设计及 ...

  2. 视频教程-Kali Linux渗透测试全程课与脚本语言编程系列课程-渗透测试

    Kali Linux渗透测试全程课与脚本语言编程系列课程 本人有多年的服务器高级运维与开发经验,擅长计算机与服务器攻防及网络攻防技术!对网络安全领域有持续的关注和研究! 林晓炜 ¥899.00 立即订 ...

  3. linux 脚本编写 -eq,关于shell脚本基础编程第四篇

    shell脚本基础编程第四篇 本章主要内容:函数 函数 function: function 名称 { 命令 ; } 或 name () { 命令 ; } 定义 shell 函数. 创建一个以 NAM ...

  4. 标杆徐linux云计算视频,标杆徐2018 Linux自动化运维系列④: Shell脚本自动化编程实战...

    2019年录制SHell新课地址 贴切企业脚本编写思路讲解,带你玩Shell脚本编程实战. 本套课程从实际项目案例出发,近100个Shell实例讲解,由浅入深,循序渐进,带你玩转Shell编程的方方面 ...

  5. linux Shell(脚本)编程入门实例讲解详解

    linux Shell(脚本)编程入门实例讲解详解 为什么要进行shell编程 在Linux系统中,虽然有各种各样的图形化接口工具,但是sell仍然是一个非常灵活的工具.Shell不仅仅是命令的收集, ...

  6. shell脚本编程for循环求阶乘_shell脚本编程(完结版).pdf

    shell脚本编程(完结版) Shell 脚本编程学习笔记 2013 年 5 月 2 日 追风~忆梦 如有任何疑问,请联系作者,作者 QQ:1028150787,或者到韦东山群共同讨论 1 Shell ...

  7. Linux下eclipse中shell脚本编程环境的搭建

    注意:本文所用到的linux发行版是fedora 15.如果用fedora 15以上的版本可能会有问题.至于解决方案或者是搭建方法我会尽量抽出时间写一篇新的博客... 本文主要是介绍在linux平台下 ...

  8. Linux Shell 脚本知识点

    正则表达式在线生成工具: http://tools.jb51.net/regex/create_reg 0. shell 调试 复制代码 代码如下: sh -x somefile.sh 在somefi ...

  9. Linux 下Shell脚本中的加减乘除运算

    在用shell脚本语言编程的时候,我们经常用到加减乘除等基本的数学运算操作,现在整理一下,放在这里,以备后用. Shell中常用的数学运算符有一下几个: +:对两个变量做加法.-:对两个变量做减法.* ...

  10. 70个经典的 Shell 脚本面试问题

    转载自:http://www.imooc.com/article/1131 1) 如何向脚本传递参数 ? ./script argument 例子: 显示文件名称脚本 ./show.sh file1. ...

最新文章

  1. IIS7、IIS8添加net.tcp协议报错 未将对象引用设置到对象的实例。
  2. java dll is多线程_Java实现多线程--四种方法
  3. plt title设置在下方_Python数据分析:可视化图表注释设置
  4. python升级pip怎么出错了_Python,开启吐槽模式,新手必看!
  5. android开发期间使用真机调试但系统无法识别出真机
  6. 一文掌握开发利器:正则表达式
  7. linux驱动导出文件属性,将Linux配置文件和设置备份到USB闪存驱动器的方法
  8. HTML中的Content-Type的类型
  9. Net Core下多种ORM框架特性及性能对比
  10. 【bfs】WJ的逃离
  11. [渝粤教育] 西南科技大学 高级语言程序设计(Java) 在线考试复习资料
  12. 更改数据库管理员sa账户密码
  13. 简述Java三大特性
  14. GeoServer发布Shapefile矢量数据
  15. 收藏!数据分析、人工智能、产品经理等6个方向学习路线图及参考书目
  16. 苏州新导RFID智能医药柜,为老人用药,取药吃药带来了方便
  17. 软件测试过程与方法_第1单元
  18. [Maven实战-许晓斌]-[第二章]-2.2基于UNIX系统安装maven
  19. vmware虚拟机序列号
  20. 国内FRM证书福利政策大全

热门文章

  1. Hibernate-03-Hibernate的检索方式
  2. Android 代码关于重构的一点体会
  3. 一个精仿今日头条项目
  4. Windows下编译FFmpeg
  5. 插件开发之360 DroidPlugin源码分析(一)初识
  6. 为什么很多类甚者底层源码要implements Serializable ?
  7. python时间处理方法_基于python时间处理方法(详解)
  8. python中列表去重有哪几种方法_python列表里的字典元素去重
  9. win10删除开机密码_教你电脑如何设置开机密码_win10教程
  10. 1.GNUradio 的环境搭建