Shell编程3小时光速入门

1、为什么要学习shell编程?

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

2、什么是Shell?

shell就是一个解释器(翻译官),命令行的命令以及脚本都会通过shell解释,传给操作系统,处理后在输出给用户。

3、Shell的分类

/bin/sh、/bin/bash、/usr/bin/sh、/usr/bin/bash

4、CentOS7默认Shell

[root@zhang ~]# echo $SHELL
/bin/bash

5、什么是Shell脚本?

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

6、Shell的变量:

A.全局变量(环境变量)

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

[root@zhang ~]# echo $PS1
[\[\e[34;1m\]\u@\[\e[0m\]\[\e[32;1m\]\H\[\e[0m\] \[\e[31;1m\]\w\[\e[0m\]]\$

自定义环境变量:
方法1
export OLDBOY="I am oldboy."

方法2:
MUNAN="I am munan."
export MUNAN

[root@munan ~]# export MUNAN="I am munan."
[root@munan ~]# echo $MUNAN
I am munan.

/etc/profile==>~/.bash_profile===>~/.bashrc===>/etc/bashrc

B.局部变量(普通变量)

是编写Shell脚本最常用的变量
用法:变量名=值(a=1)

要求

变量名:数字、字母、下划线、不能是数字开头。
=等号:赋值符(把XXX给谁)。
值:东西,变量内容
引用内容的符号:单引号、双引号、反引号、不加引号
举例:

[root@zhang ~]# a=1
[root@zhang ~]# echo $a
1
[root@zhang ~]# a=1
[root@zhang ~]# echo ${a}b
1b

7、表达式

[ 表达式 ]中括号表达式,中括号里面两端必须要有空格。
字符串要加双引号

[root@zhang ~]# [ "a" = "b" ] &&echo 1|echo 0   #<==如果表达式成立,打印1,否者打印0.
0
[root@zhang ~]# [ "a" = "b" ] || echo 0  #<==如果表达式成立是假的,打印0
0

取反:

[root@zhang ~]# [ ! "a" = "b" ] &&echo 1
1

整数表达式:
.> -gt
.>= -ge
< -lt
<= -le
= -eq
不等于 -ne
举例:

[root@zhang ~]# a=1
[root@zhang ~]# echo $a
1
[root@zhang ~]# [ $a -gt 2 ] &&echo 1||echo 0
0
[root@zhang ~]# [ $a -ge 2 ] &&echo 1||echo 0
0
[root@zhang ~]# [ $a -lt 2 ] &&echo 1||echo 0
1
[root@zhang ~]# [ $a -le 2 ] &&echo 1||echo 0
1
[root@zhang ~]# [ $a -eq 2 ] &&echo 1||echo 0
0
[root@zhang ~]# [ $a -ne 2 ] &&echo 1||echo 0
1

(1)整数表达式符 两端必须要有空格。
(2)中括号里面两端必须要有空格。
(3)变量和比较的内容,不需要加引号。
字符表达式:
-z 变量内容长度为0,为真。zero
-n 变量内容长度为【不】为0时,为真。not zero
a==a字符串时=是否相同 条件:
①字符串要加双引号

[root@zhang ~]# a="I am munan"
[root@zhang ~]# [ -n "$a" ] &&echo 1||echo 0
1
[root@zhang ~]# [ -z "$a" ] &&echo 1||echo 0
0

Shell判断句:
如果。。。那么
如果[ 我是DJ ] 那么你会爱我吗
if判断句语法:
if [ 表达式 ]
then命令
fi
举例:

[root@zhang ~]# vim munan.sh 
#!/bin/bash
a=1
if  [ $a -eq 1 ]
then
    echo 1
fi
[root@zhang ~]# vim munan.sh 
#!/bin/bash
munan="DJ"
if  [ "$munan" == "DJ" ]
then
     echo "和你谈谈理想"
else
     echo "拜拜 "
fi
[root@zhang ~]# sh munan.sh 
和你谈谈理想
[root@zhang ~]# vim date.sh
if [ $(date +%w) -eq 6 ]
then
    echo "休息"
else
    echo "上课"
fi

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

-p "提醒:"
-t "多长时间内等待输入"

[root@zhang ~]# read  -p "请输入一句话:" boy
请输入一句话:潜力股
[root@zhang ~]# echo $boy
潜力股
相当于boy="潜力股"
[root@zhang ~]# cat test.sh 
.#!/bin/bash
read -p "请输入你喜欢的男孩的一句话:" boy
if [ "$boy" ==  "潜力股" ]
then
    echo "先和你谈谈朋友"
else
    echo "白白"
fi
[root@zhang  ~]# sh test.sh
请输入你喜欢的男孩的一句话:我没钱
白白
[root@zhang  ~]# sh test.sh
请输入你喜欢的男孩的一句话:潜力股
先和你谈谈朋友
root@zhang ~]# cat test.sh 
.#!/bin/bash
read -p "请输入你喜欢的男孩的一句话:" boy
if [ "$boy" ==  "潜力股" ]
then
    echo "先和你谈谈朋友"
elif [ "$boy" ==  "老爸是李刚" ]
then
   echo "直接嫁给你"
elif [ "$boy" ==  "二环内有套房" ]
then
   echo "立马领证"

else
    echo "白白"
fi

练习题:Shell编程实现 两个整数比较大小
特殊位置变量:
$1 脚本文件的第一个参数赋值给$1
$2 脚本文件的第二个参数赋值给$2

[root@zhang ~]# cat t.sh
echo $1 $2
[root@zhang ~]# sh t.sh ZZZ XXX
ZZZ XXX  #<==ZZZ就是$1输出的结果,XXX就是$2输出的结果。
[root@zhang ~]# cat com_num.sh 
#!/bin/sh
#read -p "请输入两个整数:" a b
a=$1
b=$2
if [ $a -gt $b ]
then
    echo "$a>$b"
elif [ $a -eq $b ]
then
    echo "$a=$b"
else
    echo "$a<$b"
fi
[root@zhang ~]# sh com_num.sh 2 3
2<3
[root@zhang~]# sh com_num.sh 2 2
2=2
[root@zhang~]# sh com_num.sh 3 2
3>2

9、for循环

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

[root@zhang~]# cat for1.sh 
for n in 1 2 3 4 5
do
    echo $n
done
[root@zhang~]# sh for1.sh
1
2
3
4
5
[root@zhang~]# sh -x for1.sh
+ for n in 1 2 3 4 5
+ echo 1
1
+ for n in 1 2 3 4 5
+ echo 2
2
+ for n in 1 2 3 4 5
+ echo 3
3
+ for n in 1 2 3 4 5
+ echo 4
4
+ for n in 1 2 3 4 5
+ echo 5
5

[root@zhang~]# cat for1.sh
for n in {1..5}
do
    echo $n
done
[root@zhang~]# sh for1.sh
1
2
3
4
5

练习题:打印254个IP
书写脚本习惯:
1)以.sh结尾
2)脚本开头第一行#!/bin/bash 脚本内容由谁解释。
由于Linux下默认时bash,所以也可以忽略这一行

转载于:https://www.cnblogs.com/zqcyunwei/p/10676316.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值