linux-shell编程

1.1 什么是shell

Shell是一个命令解释器,它在操作系统的最外层,负责直接与用户对话,把用户的输入解释给操作系统,并处理各种各样的操作系统的输出结果,输出屏幕返回给用户。

1.1.1 shell对话方式

交互的方式:从键盘输入命令,通过/bin/bash的解析,可以立即得到Shell的回应,一问一答的方式

非交互式:shell脚本 

1.2 为什么使用shell编程

作为一个合格的运维人员必须掌握一种或一种以上的脚本语言,shell编程则是实现Linux/UNIX系统管理及自动化运维所必备的重要工具,可以把繁琐重复的命令写到shell脚本中执行,节约时间,有效的提高运维人员的工作效率,减少不必要的重复工作时间。

1.3 系统中的shell

linux系统默认shell是bash

[root@zeq ~]# cat /etc/shells/bin/sh/bin/bash/sbin/nologin/bin/dash/bin/tcsh/bin/csh

第2章 变量

2.1 什么是变量

x+y=20     x=10  y=? 未知数(变量)

一个未知数,随时可以变化的量叫变量

2.2 变量的分类

2.2.1 普通变量(局部变量)

只能在当前环境下使用,可以通过export命令临时把普通变量变为环境变量使用

[root@zeq ~]#ip=10.0.0.201给变量赋值(把数据存放到变量中)[root@zeq ~]# echo $ip10.0.0.201

2.2.2 环境变量(全局变量)

1.大写

2.系统定义的

3.在大部分地方可以使用

2.2.3 特殊变量

$1   $2   $数字        $后数字是几代表shell脚本第几个参数

$#                           shell脚本中参数的个数

                               判断脚本的参数个数

$?                          上一个命令的执行结果(返回值)

                              0             执行正确

                              非0           执行失败

$0                          脚本文件名

第3章 shell脚本的书写规范

3.1.1 脚本存放位置

为了防止脚本乱放,统一存放在/server/scripts/中

创建目录

[root@zeq ~]# mkdir -p /server/scripts/[root@zeq ~]# cd /server/scripts/

3.1.2 脚本编辑使用vim

3.1.3 选择解释器

在执行bash脚本的时候,内核会根据"#!"后的解释器来确定该用那个程序解释这个脚本中的内容。

[root@zeq ~]# vim /server/scripts/cal.sh    #!/bin/bash

3.1.4 文件名书写

文件名称一定要有意义,方便看出是干嘛用的脚本,并且以.sh结尾

3.1.5 书写脚本的规范和习惯

1、  放在统一目录下,方便查找

2、  书写脚本要用vim编辑,

  批量删除

  批量增加

  1.进入批量编辑模式(可视块)esc下ctrl+v

  2.选择 批量增加的范围

  3.按 shift + i 进行修改

  4.按esc 退出等等

3、 脚本文件名称以.sh结束

4、 脚本开头一定要指定解释器

5、 脚本中#代表注释,#后的内容不会执行,不用的命令等可以用#注释掉,脚本中尽量不要出现中文注释以免出现因字符集不同产生乱码

6、 代码符号书写规范

     1.成对的符号一定要都写出来再添加内容,避免遗忘漏写;如 "" '' []等

     2.流程控制语句一次书写完,再添加内容;(if 条件 ; then  内容;fi)

       3.书写的代码符号都是英文输入法格式

       4.通过缩进让代码易读

第4章 shell练习

书写一个计算器脚本

4.1 数字计算方法

[root@zeq ~]# awk  'BEGIN{print 1/2}'0.5

4.1.1 命令行中的变量 放在awk中使用

awk -v变量=赋值       变量名称自己定义

[root@zeq ~]#awk -vnum1=10  -vnum2=20 'BEGIN{print num1/num2 }'这里变量为num1和num20.5

4.1.2 书写脚本计算10与20的加减乘除

[root@zeq]# vim cal.sh#!/bin/bash

n1=10n2=20

awk -vnum1=$n1  -vnum2=$n2'BEGIN{print num1+num2 }'awk -vnum1=$n1  -vnum2=$n2'BEGIN{print num1-num2 }'awk -vnum1=$n1  -vnum2=$n2'BEGIN{print num1*num2 }'awk -vnum1=$n1  -vnum2=$n2'BEGIN{print num1/num2 }'

执行脚本

[root@zeq /server/scripts]# sh cal.sh30-102000.5

4.1.3 定义特殊变量 通过命令行传递参数方式进行计算

[root@zeq /server/scripts]# vim  cal.sh#!/bin/bash

n1=$1          第一个参数n2=$2          第二个参数awk-vnum1=$n1  -vnum2=$n2'BEGIN{print num1+num2 }'awk -vnum1=$n1  -vnum2=$n2'BEGIN{print num1-num2 }'awk -vnum1=$n1  -vnum2=$n2'BEGIN{print num1*num2 }'awk -vnum1=$n1  -vnum2=$n2'BEGIN{print num1/num2 }'

 执行脚本

[root@zeq /server/scripts]#sh cal.sh 10 20 后面要跟上两个参数才能执行成功,参数之前加空格30-102000.5

4.2 通过read 交互式

read交互式赋予变量内容

read -p "提示信息:"  变量名字

read -p "提示信息:"  p

执行之后会把输入的信息存放在变量中

[root@zeq /server/scripts]# read -p "input num1:" n1input num1:zeq

[root@zeq /server/scripts]# echo $n1zeq

4.2.1 通过read命令实现 n1 n2赋值 进行计算

[root@zeq /server/scripts]# vim cal.read.sh#!/bin/bash

read -p"input num1,num2:"n1 n2一条命令直接定义两个变量awk-vnum1=$n1  -vnum2=$n2'BEGIN{print num1+num2 }'awk -vnum1=$n1  -vnum2=$n2'BEGIN{print num1-num2 }'awk -vnum1=$n1  -vnum2=$n2'BEGIN{print num1*num2 }'awk -vnum1=$n1  -vnum2=$n2'BEGIN{print num1/num2 }'

执行脚本

[root@zeq /server/scripts]# sh cal.read.shinput num1,num2:10 20        随便输入两个数值,中间要有空格30-102000.5

4.3 条件表达式  if

4.3.1 判断目录、文件是否存在

[ -d /data ]

[ -f /data ]          

注意格式:[空格-f /data空格]   []里面两端必须有空格,中间写内容

[root@zeq /server/scripts]# [ -d /data ][root@zeq /server/scripts]#echo $?  $?特殊变量,0代表执行正确,非0执行失败0

[root@zeq /server/scripts]# [ -d /data123 ][root@zeq /server/scripts]# echo $?1

4.3.2 比大小

-eq        equal        ==-ne  not equal        !=-gt    great than        >-ge    great equal      >=-lt    less  than        <-le    less  equal      <=

4.3.3 比大小举例

[root@zeq /server/scripts]# [ 10 -eq 10 ][root@zeq /server/scripts]# echo $?                0

[root@zeq /server/scripts]# [ 10 -gt 10 ][root@zeq /server/scripts]# echo $?1[root@zeq /server/scripts]# [ 10 -ge 10 ][root@zeq /server/scripts]# echo $?0

4.3.4 if单分支格式脚本

格式: if [ 条件 ];then

        命令

fi


1、判断脚本的参数个数,如果不是2则提示请输入两个数字

[root@zeq /server/scripts]# cat pan.sh#!/bin/bashif[ $# -ne 2 ];then  echo "输入两个数字"fi

2、 给计算器(参数传递)增加一个条件

判断脚本的参数个数,

如果不是2则

提示请输入两个数字

[root@zeq /server/scripts]# cat cal.sh#!/bin/bash

n1=$1n2=$2if[ $# -ne 2 ];then  echo "USAGE: $0 num1 num2"                                  $0文件名exit  exit  退出的意思fi  awk-vnum1=$n1  -vnum2=$n2'BEGIN{print num1+num2 }'awk -vnum1=$n1  -vnum2=$n2'BEGIN{print num1-num2 }'awk -vnum1=$n1  -vnum2=$n2'BEGIN{print num1*num2 }'awk -vnum1=$n1  -vnum2=$n2'BEGIN{print num1/num2 }'

3、执行脚本

[root@zeq /server/scripts]# sh  cal.shUSAGE: cal.sh num1 num2

[root@zeq /server/scripts]# sh  cal.sh 120 2014010024006

4.3.5 if双分支格式脚本

格式: if [ 条件 ];then

        命令

             else

          命令

fi


1、comp.sh输入两个数字:

 1.如果n1大于n2

 输出 n1 > n2

 2.如果n1不大于n2

 输出 n1 <= n2

[root@zeq /server/scripts]# cat  comp.sh#!/bin/bash

n1=$1n2=$2if[ $n1 -gt $n2 ];then

  echo "$n1 > $n2"else  echo "$n1 <= $n2"fi

2、执行脚本

[root@zeq /server/scripts]# sh comp.sh 10 2010 <= 20[root@zeq /server/scripts]# sh comp.sh 10 1010 <= 10[root@zeq /server/scripts]# sh comp.sh 100 10100 > 10

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,588评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,456评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,146评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,387评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,481评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,510评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,522评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,296评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,745评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,039评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,202评论 1 343
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,901评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,538评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,165评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,415评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,081评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,085评论 2 352

推荐阅读更多精彩内容

  • 第 2 章 SHELL 基础知识2.1 shell脚本我们在上面简单介绍了一下什么是shell脚本,现在我们来进一...
    LiWei_9e4b阅读 1,566评论 0 0
  • 1.创建文件夹 !/bin/sh mkdir -m 777 "%%1" 2.创建文件 !/bin/sh touch...
    BigJeffWang阅读 10,038评论 3 53
  • [root@m01 /server/scripts]# oldboy=I love you-bash: love:...
    a狂飙的蜗牛阅读 359评论 0 0
  • 【脚本1】打印形状 打印等腰三角形、直角三角形、倒直角三角形、菱形 【脚本2】截取字符串 现有一个字符串如下: h...
    学无止境_9b65阅读 444评论 0 1
  • [root@m01 /server/scripts]# oldboy='I love you'[root@m01 ...
    我要笑阅读 134评论 0 0