day 28

shell编程基础

shell编程一小时光速入门
web集群架构会用到shell编程基础

1、为什么要学shell编程?

Linux系统中 会大量的使用shell,工作中我们也需要自动化实现业务。
例如:自动备份、监控、自动安装服务。
shell编程是Linux运维人员必须要会的编程语言。最简单的编程语言。
编程也是运维人员必须具备的本领:
shell、Python是运维人员必须具备的本领。

2、什么是shell?

shell 就是一个解释权,命令行的命令以及脚本都会通过shell解释,传给操作系统,处理后再输出给用户。

3、shell的分类

3.1、Bourne shell
Bourne shell又包括Bourne shell(sh)、Korn shell(ksh)、
3.2、C shell
C7支持的解释器
/bin/bash
/usr/bin/sh

4、C7:默认shell

/bin/bash

5、什么是shell脚本?

程序、命令放入文件里执行,这个文件称之为shell脚本文件。
工作中最多的编程写脚本,存放在文件里。

6、shell变量:

a:全局变量(环境变量)

在整个系统中生效、一般是大写、系统中默认就存在一些这样的变量,满足系统和程序运行的需求。
系统自带的环境变量;
echo PATH、echo UID

自定义环境变量:
方法一:(临时生效)
export OLDBOY="I anm oldboy"

方法二:
OLDBOU="I anm oldboy"
echo $OLDBOY
永久生效:
安装java服务的时候就会配置环境变量
b:局部变量(普通变量)
是编写shell脚本最常用的变量。

变量名=值
a=1
变量名:数字、字母、下划线,不能是数字开头。
= 等号:赋值符,把什么东西给谁。
值:东西,变量内容。
引用内容的符号:单引号、双引号、反引号、不加引号。
image.png

(再赋值一次,会覆盖)


变量相加.png

7、表达式

[ 表达式 ]中括号表达式,中括号里面两边必须要有空格。
字符串要加双引号
 [root@waiwai ~]# [ "a" = "b" ] && echo 1||echo 0
 [ "a" = "b" ] && echo 1||echo 0如果表达式成立,打印1,否则打印0
 [ "a" = "b" ] && echo 1  如果表达式成立,打印1
 [ "a" = "b" ]  || echo 1||echo 0  如果表达式成立是假的,打印0

整数表达式:

>            -gt
>=          -ge
<            -lt
<=          -le
=            -eq
不等于   -ne

1)、整数表达式符,两端必须要有空格。
2)、中括号里面两端必须要有空格。
3)、变量和比较的内容,不需要加引号

字符表达式:

-z:变量内容长度为0时,为真。(正确)zero
-n:变量内容长度【不】为0时,为真(正确)。not zero

a == a :字符串是否相同
说明
1)字符串要加双引号

例:
[root@waiwai ~]# oldboy="I am oldboy"
[root@waiwai ~]# [ -z "$oldboy" ] && echo 1 ||echo         0
0
[root@waiwai ~]# oldboy=""
[root@waiwai ~]# [ -z "$oldboy" ] && echo 1 ||echo     0
1
[root@waiwai ~]# [ -n "$oldboy" ] && echo 1 ||echo 0
0
[root@waiwai ~]#

判断句:

如果...那么。
if:判断语句法:
if  [ 表达式 ]
then
       命令
fi

如果 [ ***** ]
那么
      ******

书写脚本习惯:

1、以 .sh结尾。
2、脚本开头第一行   #!/bin/bash  脚本内容由谁解释。
由于Linux下默认是bash,所以也可以不写这一行。

实现多条件

read 命令:交互式读取用户输入

-p:"提醒:"
-t: 多长时间输入
[root@waiwai     /server/scripts]# read -t 3 -p     "请输入一句话: "
请输入一句话:     [root@waiwai     /server/scripts]# ls

特殊位置变量:

$1脚本文件的第一个参数赋值给$1 
$2脚本文件的第二个参数赋值给$2

9、for循环

for n in 取值列表
do
      执行命令
done

你可能感兴趣的:(day 28)