shell编程规范与变量

shell编程规范与变量

  • 什么是shell
    • linux系统的shell的种类
    • 什么是脚本
    • 脚本执行的三种方式
    • 重定向与管道操作
    • 变量的作用
    • 怎么定义变量:
    • 变量的作用范围
      • 环境变量
      • 位置变量
      • 预定义变量

基本概念,操作方法,变量声明

什么是shell

把人类的语音转换成计算机的二进制,计算机内核处理,二进制转换成人类能够识别的语言。(shell是在中间的,是一个解释器)

linux系统的shell的种类

bash:Linux默认的解释器
tcsh:整合了csh的功能,提供比csh更强大的功能
csh:类似于c语音的shell
nologin:也是shell的一种类型,禁止用户登录

/etc/shells 是所有的shell的目录 使用cat /etc/shells 来进行查看
用户登录的默认是shell /etc/passwd
除非指定,默认都是bash

什么是脚本

扩建语言,动态语言,也是一种编程语言
控制软件应用程序,脚本都是以文本形式保存。只有在调用才会进行解释或者编译
执行文本当中的特定命令(按行执行)

shell脚本的构成:
第一类:开头,标明解释器,#!/bin/bash #!/usr/bin/python
调用其他的解释器,开头需要声明
第二类:执行语句,都是系统支持的命令格式。只要系统能够执行的语句(包括第三方的扩展命令,都可以在做为执行语句)
第三类:注释语句,#做为注释,注释的代码,不会被执行

脚本执行的三种方式

不需要赋予执行权限的就是可以执行
sh,source
source:点命令,也是一个符号(.),(.)是bash的内部命令,自带的
读取文件当中的可执行命令,然后会加载到shell中,不用重启,直接生效

赋权执行:chmod +x ,chmod 777
./:相对路径执行 .是当前目录下
/etc/xxx 是绝对路径执行
这两种方式,都必须要有执行权限,这是生产当中的主要执行方式。
工作当中都是赋权执行的,sh和source只限于调试阶段
都是以绝对路径来执行的
脚本一般和定时任务一块设置的(一定要是绝对路径)

重定向与管道操作

重定向操作
重定向输出:>把指定结果保存到文件中,覆盖到原有的内容
重定向输入:<从指定文件读取数据,也可以理解为免交互
重定向输出:>>会在当前的内容的尾部追加,不覆盖原有的内容
重定向错误输出:2>,将错误的信息保存到指定的文件,也会覆盖原有内容
混合输出:&>,标准和错误都保存到文件中,会覆盖原有的内容

变量的作用

变量:可以改变,类型和范围
计算机:
变量需要有范围,类型。用户指定变量(自定义变量)
直白的说话:你想干什么,就要定义出你要干的事情是什么。算法,定义数字
自定义变量:用户指定需要的参数
变量的类型:int整型,string:字符串,布尔:true,false,浮点:1.12
变量名:固定名称,用户自定义,系统预设
1、不要使用linux系统的操作命令,或者系统命令来指定变量名
2、不要用中文指定变量名
3、不能使用特殊符号开头,$#^&*,可以用_开头
4、默认原则:最好用名称的英文来指定变量名
5、注释,注释的目的:1、解释一下你的代码的用途

怎么定义变量:

变量名=变量值
查看变量的值:
echo $变量名
echo ${AA}
只读变量
只读变量不能赋值
只读变量不能删除
赋值的时候,引号的作用
1、反撇号:命令替换,把命令执行的结果,赋值给变量
2、单引号:强引用,用单引号打印变量,只会输出变量名
3、双引号:弱引用,打印变量的赋值
通过read命令来获取变量:

–p 指定提示符,提示用户输入数据
read --p “”a

变量的作用范围

默认情况下,新定义的变量只能在当前的shell生效,也可以局部变化
全局变量:在程序和脚本中以及全部的shell环境都可以被引用
一旦有命名,非常麻烦,可以导致未知的不确定性,难以调试
export:变量名=变量值
vim /etc/profile
source /etc/profile
export 临时声明,只能在当前的shell中,重启失效
/etc/profile 对所有人
/root/.bashrc_profile
/root/.bashrc 只能对root用户生效

环境变量

系统提前建立好的,或者人工添加的,用来设置用户的工作环境,配置系统行为,传递信息,控制程序执行
系统环境变量:所有人可见,都可用
echo$PATH
用户级环境变量:只能对当前用户开放和使用
$HOME用户的宿主名称
$PWD表表示当前所在的目录
$PATH可执行程序的默认路径

位置变量

命令行参数
脚本运行时候,从外部传递变量值,让脚本来运行,可以根据需要来进行处理
$n:n 表示的是数字
123456789
${10}10以上的参数用大括号表示
$0:表示整个命令本身,$1$2是从左往右依次赋值。要在脚本执行时,在外部传入变量值

预定义变量

编程语音或者脚本解释器提供的,可以自动设置,但是由编程语音和脚本解释器自动完成,人工不能修改。
$* $@ :表示命令和脚本需要处理的参数
$* :加引号时候,会把参数当做一个整体,不加引号,分别处理
$@:加不加引号,会把参数分开处理
$*:和 $@在不加引号的时候,都会把参数分开处理
$#:统计,传递给脚本的参数的个数
$?:表示一条命令或者脚本执行后的返回码,返回码是0,表示执行正确,所有非0的返回码,都表示执行错误。只能返回最近的一次命令,或者从脚本执行的返回码

你可能感兴趣的:(服务器,linux,运维,安全)