shell编程规范与变量

一、Shell脚本概述

1.1、Shell脚本的概念

●将要执行的命令按顺序保存到一个文本文件

●给该文件可执行权限

●可结合各种Shell控制语句以完成更复杂的操作

1.2、Shell脚本应用场景

应用场景:
●重复性操作

●交互性任务(人可以和脚本交互,人根据脚本进行输入,脚本完成人想执行的操作)

●批量事务处理

●服务运行状态监控

●定时执行任务

1.3、Shell编程规范

1.3.1、Shell的作用

●命令解释器,“翻译官”

●介于系统内核与用户之间,负责解释命令行

用户登录Shell
登陆后默认使用的Shell程序,一般为 /bin/bash
不同Shell的内部指令、运算环境等会有所区别

[root@localhost ~]# cat /etc/shells
/bin/sh
/bin/bash
/usr/bin/sh
/usr/bin/bash
/bin/tcsh
/bin/csh

1.4、编写Shell脚本

1.4.1、编写脚本代码

●使用vim文本编辑器

●每一条Linux命令,按执行顺序依次编写

●脚本后缀为.sh

#!/bin/bash
cd boot
pwd
ls -lh vml*

[root@localhost opt]# vim first.sh
#!/bin/bash		
cd /boot
pwd
ls -lh vm*
~    	'保存退出'
[root@localhost opt]# ls
first.sh  rh

1.4.2、执行脚本文件(三种方法)

●方法一:sh脚本文件路径

[root@localhost opt]# sh first.sh 
/boot
-rwxr-xr-x. 1 root root 6.4M 7月  13 18:58 vmlinuz-0-rescue-1b205870ecba4bd9adfd9b53e0c5f1f9
-rwxr-xr-x. 1 root root 6.4M 11月  9 2018 vmlinuz-3.10.0-957.el7.x86_64

●方法二:source脚本文件路径

[root@localhost opt]# source first.sh 
/boot
-rwxr-xr-x. 1 root root 6.4M 7月  13 18:58 vmlinuz-0-rescue-1b205870ecba4bd9adfd9b53e0c5f1f9
-rwxr-xr-x. 1 root root 6.4M 11月  9 2018 vmlinuz-3.10.0-957.el7.x86_64

●方法三:.空格脚本文件路径

[root@localhost opt]# . first.sh 
/boot
-rwxr-xr-x. 1 root root 6.4M 7月  13 18:58 vmlinuz-0-rescue-1b205870ecba4bd9adfd9b53e0c5f1f9
-rwxr-xr-x. 1 root root 6.4M 11月  9 2018 vmlinuz-3.10.0-957.el7.x86_64

●方法四:脚本文件路径(绝对路径与相对路径)

[root@localhost opt]# ./first.sh
-bash: ./first.sh: 权限不够
[root@localhost opt]# chmod +x first.sh
[root@localhost opt]# ./first.sh 
/boot
-rwxr-xr-x. 1 root root 6.4M 7月  13 18:58 vmlinuz-0-rescue-1b205870ecba4bd9adfd9b53e0c5f1f9
-rwxr-xr-x. 1 root root 6.4M 11月  9 2018 vmlinuz-3.10.0-957.el7.x86_64

1.4.3、更完善的脚本构成

●脚本声明

●注释信息

●可执行语句

#!/bin/bash
cd /boot
echo "当前所在位置:"
pwd
echo "以vml开头的文件信息:"
ls -lh vml*
[root@localhost opt]# ./first.sh 
当前所在位置:
/boot
以vml开头的文件信息:
-rwxr-xr-x. 1 root root 6.4M 7月  13 18:58 vmlinuz-0-rescue-1b205870ecba4bd9adfd9b53e0c5f1f9
-rwxr-xr-x. 1 root root 6.4M 11月  9 2018 vmlinuz-3.10.0-957.el7.x86_64

1.4、管道与重定向

1.4.1、交互式硬件设备

●标准输入:从该设备接收用户输入的数据

●标准输出:通过该设备向用户输出数据

●标准错误:通过该设备报告执行出错信息
在这里插入图片描述

1.4.2、重定向操作

在这里插入图片描述

1.4.3、管道操作符号“|”

将左侧的命令输出结果,作为右侧命令的处理对象(前后有关系时使用)

[root@localhost ~]# grep "bash$" /etc/passwd
root:x:0:0:root:/root:/bin/bash
amandabackup:x:33:6:Amanda user:/var/lib/amanda:/bin/bash
postgres:x:26:26:PostgreSQL Server:/var/lib/pgsql:/bin/bash
chenjian:x:1000:1000:chenjian:/home/chenjian:/bin/bash
[root@localhost ~]# grep "bash$" /etc/passwd | awk -F: '{print $1,$7}'
root /bin/bash
amandabackup /bin/bash
postgres /bin/bash
chenjian /bin/bash

[root@localhost ~]# df -Th
文件系统                类型      容量  已用  可用 已用% 挂载点
/dev/mapper/centos-root xfs        50G  5.7G   45G   12% /
devtmpfs                devtmpfs  894M     0  894M    0% /dev
tmpfs                   tmpfs     910M     0  910M    0% /dev/shm
tmpfs                   tmpfs     910M   11M  900M    2% /run
tmpfs                   tmpfs     910M     0  910M    0% /sys/fs/cgroup
/dev/sda1               xfs      1014M  181M  834M   18% /boot
/dev/mapper/centos-home xfs       247G   37M  247G    1% /home
tmpfs                   tmpfs     182M  4.0K  182M    1% /run/user/42
tmpfs                   tmpfs     182M   24K  182M    1% /run/user/0
/dev/sr0                iso9660   4.3G  4.3G     0  100% /run/media/root/CentOS 7 x86_64
[root@localhost opt]# df -Th | awk '{print $1,$6}'           ‘查看第1.6列的数据’
文件系统 已用%
/dev/mapper/centos-root 12%
devtmpfs 0%
tmpfs 0%
tmpfs 2%
tmpfs 0%
/dev/sda1 18%
/dev/mapper/centos-home 1%
tmpfs 1%
tmpfs 1%
/dev/sr0 100%


二、shell脚本变量

2.1、shell变量的作用,类型

变量的值存在内存当中

变量名不能改,系统预设

变量值,用户可以设置改变

变量的类型:
自定义变量

特殊变量:环境变量,只读变量,预定义变量

●变量的作用
●用来存放系统和用户需要使用的特定参数(值)
●变量名:使用固定的名称,由系统预设或用户定义
●变量值:能够根据用户设置、系统环境的变化而变化

●变量的类型
●自定义变量:由用户自己定义、修改和使用
●特殊变量:环境变量,只读变量,位置变量,预定义变量

2.2、自定义变量

2.2.1、定义一个新的变量与查看变量的值

●变量名以字母或下划线开头,区分大小写,建议全大写

变量名在左,变量值在右,=是赋值符号,不是等于

想看变量的值要在变量名之前加$

重启机器就没了,想要永久保存变量值就保存到新建文件夹或者存储到数据库内

变量名=变量值
代表将右边的值赋予左边
查看变量的值:echo $变量名
[root@localhost opt]# 
[root@localhost opt]# num1=10
[root@localhost opt]# echo $num1
10
[root@localhost opt]# name=ky
[root@localhost opt]# echo $name$num1
ky10

2.2.2、赋值时使用引号

●双引号:允许通过$符号引用其他变量值

●单引号:禁止引用其他变量值,$视为普通字符

●反撇号:命令替换,提取命令执行后的输出结果

[root@localhost opt]# num2="test $num1"      ##允许通过$符号引用其他变量值
[root@localhost opt]# echo $num2
test 10
[root@localhost opt]# num2='test $num1'       ##禁止引用其他变量值,$视为普通字符
[root@localhost opt]# echo $num2
test $num1
[root@localhost opt]# num3=`ps -aux |wc -l`    ##命令替换,提取命令执行后的输出结果
[root@localhost opt]# echo $num3
222
[root@localhost opt]# num4=$(ps -aux |wc -l)   
[root@localhost opt]# echo $num4
222

从键盘输入内容为变量赋值

read [-p "提示信息"] 变量名
[root@localhost opt]# read -p "请输入一个整数: " sum
请输入一个整数: 150
[root@localhost opt]# echo $sum
150

从键盘输入内容为变量赋值

#!/bin/bash
read -p "请输入一个暗号:" num
echo "你的成绩是:$num"

[root@localhost opt]# ./first.sh 
请输入一个暗号:99
你的成绩是:99

2.2.3、设置变量的作用范围
格式一:export 变量名...
格式二:export 变量名=变量值...
两种格式可以混合使用
[root@localhost opt]# num1=10
[root@localhost opt]# echo $num1
10
[root@localhost opt]# bash                     ##进入bash变量
[root@localhost opt]# echo $num1
                                               ##无法显示
[root@localhost opt]# exit
exit                                           ##退出bash变量
[root@localhost opt]# echo $num1
10
[root@localhost opt]# export num1=10           ##赋予全局变量,全局声明变量
[root@localhost opt]# echo $num1
10
[root@localhost opt]# bash                     ##进入bash变量
[root@localhost opt]# echo $num1
10                                             ##显示出来了

2.2.4、整数变量的运算和常用运算符

●整数变量的运算

expr 变量1  运算符  变量2  【运算符  变量3】...

●常用运算符

●加法运算:+

●减法运算:-

●乘法运算:*

●除法运算:/

●求模(取余)运算:%

[root@localhost opt]# expr 3+2    ##错误格式,没加空格
3+2
[root@localhost opt]# expr 3 + 2    ##加法运算
5
[root@localhost opt]# expr 3 - 2   ##减法运算
1
[root@localhost opt]# expr 3 * 2   ##错误格式
expr: 语法错误
[root@localhost opt]# expr 3 \* 2  ##乘法运算 
6
[root@localhost opt]# expr 3 / 2   ##除法运算
1
[root@localhost opt]# expr 3 % 2   ##取余运算
1

2.3、特殊的Shell变量

2.3.1、环境变量和特殊的环境变量

环境变量

●由系统提前创建,用来设置用户的工作环境

●配置文件: /etc/profile、~/.bash_profile

常见的环境变量

●PWD、PATH

●USER、SHELL、HOME

只读变量

●用于变量值不允许被修改的情况

[root@localhost opt]# name=cloud
[root@localhost opt]# readonly name
[root@localhost opt]# echo $name
cloud
[root@localhost opt]# name=yun
bash: name: 只读变量
[root@localhost opt]# unset name
bash: unset: name: 无法反设定: 只读 variable



位置变量

●表示为$n,n为1~9之间的数字

[root@localhost~]#.myprog.sh  one  two  three  four  five  six

#!/bin/bash
read -p "请输入第一个整数:" a
read -p "请输入第二个整数:" b
sum=`expr $a + $b`
echo "和为:$sum"
[root@localhost opt]# vim first.sh 
[root@localhost opt]# ./first.sh 
请输入第一个整数:20
请输入第二个整数:30
和为:50
[root@localhost opt]# ./first.sh 
请输入第一个整数:90
请输入第二个整数:100
和为:190

#!/bin/bash
echo "所输入的数字为:" $3 $2 $1
[root@localhost opt]# ./first.sh 1 2 3
所输入的数字为: 3 2 1

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值