linux-shell编程基础

第1章 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 $ip

10.0.0.201

2.2.2 环境变量(全局变量)

1.大写

2.连串定义的

3.在大部地点可以采取

2.2.3 特殊变量

$1   $2   $数字        $后数字是几表示shell脚本第多少个参数

$#                           shell脚本中参数的个数

                               判断脚本的参数个数

$?                          上贰个命令的进行结果(再次来到值)

                              0             执行科学

                              非0           执行破产

$0                          脚本文件名

第壹章 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 书写脚本的正规化和习惯

壹 、  放在统一目录下,方便寻找

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

  批量去除

  批量伸张

  1.进入批量编制格局(可视块)esc下ctrl+v

  2.抉择 批量增加的限量

  3.按 shift + i 进行改动

  4.按esc 退出等等

三 、 脚本文件名称以.sh甘休

四 、 脚本开首一定要指定解释器

5、
脚本中#意味着注释,#后的始末不会执行,不用的吩咐等可以用#诠释掉,脚本中尽量不要出现汉语注释防止出现因字符集差距暴发乱码

六 、 代码符号书写规范

     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和num2

0.5

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

[root@zeq]# vim cal.sh

#!/bin/bash



n1=10

n2=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.sh

30

-10

200

0.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

-10

200

0.5

4.2 通过read 交互式

read交互式赋予变量内容

read -p “提醒音讯:”  变量名字

read -p “指示新闻:”  p

履行之后会把输入的音信寄存在变量中

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

input num1:zeq

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

zeq

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.sh

input num1,num2:10 20         随便输入两个数值,中间要有空格

30

-10

200

0.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

 

① 、判断脚本的参数个数,假若不是2则指示请输入五个数字

[root@zeq /server/scripts]# cat pan.sh

#!/bin/bash



if [ $# -ne 2 ];then

   echo "输入两个数字"

fi

② 、 给统计器(参数传递)扩充1个尺度

判定脚本的参数个数,

如若不是2则

唤醒请输入七个数字

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

#!/bin/bash



n1=$1

n2=$2



if [ $# -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 }'

叁 、执行脚本

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

USAGE: cal.sh num1 num2

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

140

100

2400

6

4.3.5 if双分支格式脚本

格式: if [ 条件 ];then

        命令

             else

          命令

fi

 

一 、comp.sh输入五个数字:

 1.如果n1大于n2

 输出 n1 > n2

 2.如果n1不大于n2

 输出 n1 <= n2

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

#!/bin/bash



n1=$1

n2=$2



if [ $n1 -gt $n2 ];then

   echo "$n1 > $n2"

else

   echo "$n1 <= $n2"

fi

贰 、执行脚本

[root@zeq /server/scripts]# sh comp.sh 10 20

10 <= 20

[root@zeq /server/scripts]# sh comp.sh 10 10

10 <= 10

[root@zeq /server/scripts]# sh comp.sh 100 10

100 > 10

相关文章