Shell编程规范和变量
一、Shell脚本编程规范:①shell脚本应用脚本
②shell编程规范
③管道与重定向
1.Shell脚本变量:①自定义变量
②特殊变量
Linux运行靠各种命令进行控制,命令要运行在Linux中他是一种程序,此程序为命令解释器,这个命令解释器在Linux中的另一个名字就是shell(shell:壳,贝壳,炮弹,外形)
2.Shell脚本的概念:
①将要执行的命令按(逻辑)顺序保存到一个文本文件
②给该文件可执行权限,便可运行
③可结合各种shell控制语句已完成更复杂的操作
3.Shell脚本应用场景:重复性操作,批量事务处理,自动化运维,服务运行状态监控,定时任务执行,等等。
4.Shell脚本的构成:
① 脚本声明 :#!/usr/bin/bash (属于绝对路径)
② 注释信息 :以”#”号开头
③ 可执行语句 :echo,pwd,cd,.....(按顺序进行罗列,一行一命令)
④ 查看系统脚本 :
more /etc/sysconfig/network-scripts/ifup (ps:终端或者xshell中都可以运行)
在shell中,“#!”这两个符号连在一起使用是运行的意思,并且在shell运行中是可以被读取的。但是只有一个#就是注释的意思。
echo “aaa”(ps: 单/双引号里是什么内容,回车后就输出什么内容)
5.脚本的执行方式:
① 绝对路径 :对当前账户起作用,需要chmod用户权限
② 相对路径 :对当前账户起作用,需要chmod用户权限
③ sh脚本路径 :不需要chmod任何执行权限。
which sh --回车-->/urs/bin/sh
ls -l /usr/bin/sh --回车-->: ...->bash
which bash --回车-->: /usr/bin/bash
sh first.sh --回车-->就会自动调用bash
④ source 脚本路径:属于本地shell,也不需要chmod任何权限
6.管道与重定向:
(1)管道:
① 管道操作符号 “|”
② 将左侧的命令输出结果,作为右侧命令的处理对象
③ 格式 cmd1 | cmd2 [... | cmdn]
栗子:
① cat /etc/httpd/conf/httpd.conf | less
② cat /etc/passwd | grep “root”
③ cat /etc/passwd | grep “bash” | wc -l
(2)重定向操作:
标准输入:从该设备接收用户输入的数据
标准输出:通过该设备向用户输出数据
标准错误:通过该设备报告执行出错信息
重定向操作分类:
(1)
类型 操作符合 用途
①重定向输入: < 从指定的文件读取数据
②重定向输出: >或者>> 将输出的结果保存到或者追加到指定的文件
③标准错误输出: 2>或者2>> 将错误信息保存到或者追加到指定的文件
④混合输出: $>或者$>> 将标准输出、标准错误输出保存到或者追加到指定文件
tail -l /etc/shadow : 查看所有用户状态。
(tail:尾巴,跟踪;shadow:影子)
(2)
①重定向输入:
useradd tom
vi mima (ps:要输入两遍,第一遍是输入,第二遍是重新输入)
passwd tom < mima (ps: 省掉了两次手动输入密码的过程)
cat /etc/passwd | wc -l (ps:统计所有设置的密码个数)
②重定向输出:(ps:>所保存到的文件,若没有会自动创建,再输入会覆盖)
二、shell脚本变量
1.变量的概念:
①变量是用来存放系统或用户需要使用的特定参数或值
② 变量的值可以根据用户设定或者系统环境的变化而相应变化
③在shell脚本中使用变量,可以使脚本更加灵活,适应性更强
2.变量的分类:
① 自定义变量:由用户自己定义、修改和使用
②环境变量:由系统维护,用于设置工作环境
③位置变量:通过命令行给脚本程序传递参数
④预定义变量:Bash中内置的一类变量,不能直接修改
2.1变量:字母或下划线开头,区分大小写
给变量赋值:(ps:①区分大小写②$取值③后一个所赋值覆盖前一个④可不加引号⑤${}进行区分⑥除了下划线,中间可加特殊字符)
2.2赋值可使用的引号:
①双引号:允许通过$符号引用其他变量值
②单引号:禁止引用其他变量值,$视为普通字符
③反撇号``或者$():命令替换,提取命令的执行结果
2.3输入输出:
① 输入格式:read [-p “提示信息”] 变量名
②输出格式:echo $变量名
3.变量作用范围:
①默认情况下,新自定义的变量只在当前shell环境中有效,因此称为局部变量
②当进入子程序,或进入新的子shell环境时,局部变量将无法在使用
③为了使用户定义的变量在所有的子shell环境中能够继续使用,减少重复设置工作,可以通过内部命令export将指定的变量导出为“全局变量”
④格式1 :export 变量名...
⑤格式2 :export 变量名=变量值...
⑥两种格式可以混合使用
注意:
输入个bash回车,虽没任何提示,但已进入新的子shell中。
输入exit或者Ctrl+d退回到上一个shell环境
4.变量的算术运算:
①变量的数值运算多用于脚本程序的过程控制
②只能进行简单的整数运算,不支持小数运算
③整数值的运算主要通过内部命令expr进行
④格式:
expr 变量1 运算符 变量2 [运算符 变量3]...
①运算符:
+ :加法运算
- :减法运算
\* :乘法运算,注意不能仅使用”*”符号,否则将被当成文 件通配符
/ : 除法运算
% :求模运算,又称为求余运算,用来计算数值相除后的 余数
注意:
expr只能运算整数:(ps: 5 / 3 值也是整数)
5.预定义变量:又称特殊变量
①预定义变量是由Bash程序预先定义好的一类特殊变量,用户只能使用预定义变量,而不能创建新的预定义变量,也不能直接为预定义变量赋值
②预定义变量使用”$”符号和另一个符号组合表示
③$*、$@ 都保存了脚本要处理的所有参数
④$*是把所有要处理的参数看成一个整体,即:一个对象
⑤$@是把所有要处理的参数看成一个个小整体。
⑥$0 是保存了脚本的名称
⑦$? (0为真,非0为假) 保存了命令或者脚本运行状态码
⑧$# 保存了脚本要处理的参数的个数
date +%s : 从1970年1月1日0时0分0秒,到现在的秒数
6.位置变量:
① 为了在使用shell脚本程序时,方便通过命令行,为程序提供操作参数,Bash引入了位置变量的概念
② 位置变量有$0, $n , n为1~9的数字
③ $0:第一个字段表示命令名或脚本程序名
④ $1:为脚本要处理的第一个参数,$2......
⑤ Shell 脚本最多可以直接处理9个参数
6.环境变量:
① 指的是出于运行需要而由Linux系统提前创建的一类变量,主 要用于设置用户的工作环境
② 使用env命令可以查看到当前工作环境下的环境变量
③ PATH变量用于设置可执行程序的默认搜索路径
④ 环境变量的全局配置文件为/etc/profile,每个用户还有自己的 独立配置文件~/.bash_profile