Shell编程规范与变量
1.Shell脚本概述
在一些复杂的 Linux 维护工作中,大量重复性的输入和交互操作不仅费时费力,而且容易出错,而编写一个恰到好处的 Shell 脚本程序,可以批量处理、自动化地完成一系列维护任务,大大减轻管理员的负担。
1.1 Shell 的作用
- 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.2 执行脚本的三种方式
先简单写一个脚本,取名字first.sh
方法一:脚本文件路径(绝对路径和相对路径)
[root@localhost ~]# ./first.sh
成功
方法二:sh脚本文件路径
[root@localhost ~]# sh first.sh
成功
方法三:soure 脚本文件路径
[root@localhost ~]# source first.sh
成功
注意点:执行脚本之前,必须给脚本执行权限
1.3 重定向与管道操作
-
交互式硬件设备
标准输入:从该设备接收用户输入的数据标准输出:通过设备向用户输出数据
标准错误:通过该设备报告执行出错信息
-
重定向操作
混合输出 &>> 将标准输出,标准错误的内容保存到同一个文件中
- 管道操作符号"|"
将左侧的命令输出结果,作为右侧命令的处理对象
netstat -aunpt | grep 873
tcp 0 0 20.0.0.28:873 0.0.0.0:* LISTEN 10474/rsync
2. Shell变量的作用,类型
2.1 变量的作用
-
来存放系统和用户需要使用的特>定参数(值)
-
变量名:使用固定的名称。由系>统预设或用户定义
-
变量值:能够根据用户设置,系>统环境的变化而变化
变量的类型 -
自定义变量:由用户自己定义>,修改和使用
-
特殊变量:环境变量,只读变>量,位置变量,预定义变量
2.2 自定义变量
-
定义一个新的变量:
变量名以字母或下划线开头,区分大小写,建议全大写变量名=变量值
查看变量的值
echo $变量值
[root@localhost ~]# Products Python
[root@ local host ~]# Version=2.7.13
[root@localhost ~]# echo $Product
Python
-
赋值时使用引号
双引号:允许通过$符号引用其他变量值单引号:禁止引用其他变量值,$视为普通字符
反撇号:命令替换,提取命令执行后的输出结果
从键盘输入内容为变量赋值
read [-p "提示信息"]变量名
- 设置变量的作用范围
格式1: export变量名…
格式2: export变置名=变置值...
[root@localhost -]# echo "$Product $Version"
Benet 6.0
[root@localhost ] # export Product Version ##导出为全局变量
[root@localhost ~j# bash
[root@ local host ~]# echo "$Product $Version" ###子程序应用全局变量
Benet 6.0
- 整数变量的运算
expr 变量1 运算符 变量2 [运算符 变量3]...
常用的运算符
加法运算:+
减法运算:-
乘法运算:*
除法运算:/
求模(取余)运算:%
2.3 特殊的shell变量
环境变量
由系统提前创建,用来设置用户的工作环境
配置文件:/etc/profile 、~/.bash_profile
常见的环境环境
PWD,PATH
USER,SHELL,HOME
[root@localhost ~]# echo $PATH
/usr/local/mysql/bin:/usr/local/mysql/lib:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
- 只读变量
用于变量值不允许被修改的情况
[root@localhost -]# name=cloud
[root@localhost -]# readonly name //设置为只读变量
[root@localhost ~j# echo $name
cloud
[root@localhost ] # name=yun
-bash: name: readonly variable //只读变量不可以被重新赋值 [root@localhost~]#
[root@localhost -]# unset name //只读变量不可以被删除
-bash: unset: name: cannot unset: readonly variable
- 位置变量
表示为$n,n为1-9之间的数字
[root@localhost ]# ./myprog.sh one two three four five
- 预定义变量
$#:命令行中位置变量的个数
$*:所有位置变量的内容
$?:上一条命令执行后返回的状态,
当返回状态值为o时 表示执行正常>,非o值表示执行异常或出错
$0:当前执行的进程/程序名