shell特性hash:
缓存此前命令的查找结果,在使用命令是并不是直接去环境变量中查找,而是先在hash表中查找,当在hash表中没有该命令是再去环境变量中查找。
-d:后加命令,可在hash表中删除该命令的记录
-r:清空hash表
shell特性多行执行:
COMMAND1;COMMAND2;COMMAND3
逻辑运算:真(true,yes,on,1),假(false,no,off,0)
与:1&&1=1
1&&0=0
0&&1=0
0&&0=0
或:1||1=1
1||0=1
0||1=1
0||0=0
非:!1=0
!0=1
COMMAND1&&COMMAND2:当COMMAND1为假时,COMMAND2不执行;当COMMAND1为真时,COMMAND2必须执行
COMMAND1||COMMAND2:当COMMAND1为真时,COMMAND2不执行;当COMMAND1为假时,COMMAND2必须执行
shell特性变量
程序:指令+数据
指令:由程序文件提供
数据:IO设备、文件、管道、变量
变量类型:存储格式、表示数据范围、参与的运算
编程语言:
(1)编程类型是否可以改变
强类型语言:java
弱类型语言:bash把所有变量视为字符类型;变量无需事先声明,相当于声明(类型,变量名)和赋值同时实现;
变量名:变量只能包含数字、字母、下划线,不能以数字开头,不能使用程序保留字
bash变量类型:
本地变量:作用域为当前shell进程有效
变量引用:${var_name},$var_name
" ":变量名会替换为其值
' ':变量名不会 替换为其值
查看变量:set
撤销变量:unset var_name 【注意一定不能加$】
环境变量:作用域为当前shell进程及其子进程
变量赋值:(1)export var_name=var
(2)var_name=var
export var_name
(3)declare -x var_name=var
(4)var_name=var
declare -x var_name
查看环境变量:export,declare -x,printenv,env
撤销环境变量:unset var_name
只读变量:不能发生变化,无法撤销,作用域为当前shell进程
变量赋值:(1)declare -r var_name
(2)readonly var_name
局部变量:作用域为某代码片段
位置参数变量:向执行脚本的shell传递参数
特殊变量:内置的有特殊公用的变量
shell脚本编程:是过程编程,解释运行,依赖于外部程序文件运行
编程语言分类:根据运行方式
编译运行:源代码-->编译器(编译)-->程序文件
解释运行:源代码-->运行时启动解释器,由解释器边解释边运行
根据其编程过程中功能的实现时根据调用库还时调用外部的程序文件:
shell脚本编程:利用系统上的命令及编程进行编程
完整编程:利用库或编程组件进行编程
编程类型:过程式编程语言、面向对象的编程语言
过程式编程语言:以指令为中心来组织代码,数据服务与代码,C、bash
面向对象的编程语言:以数据为中心来组织代码,java,C++
如何些shell脚本:
脚本第一行顶格:给出shebang(解释器路径),例如:#!/bin/bash,#!/usr/bin/python,#!/usr/bin/perl
文本编程器:
行编辑器:sed
全屏幕编辑器:nano(其中的 ^托字符 表示ctrl),vi,vim
如何运行脚本:
(1)赋予文件执行权限,使用绝对路径或相对路径运行
(2)使用解释器运行
bash配置文件:
profile类:为交互式登录的shell进程提供配置
交互式登录:直接通过某终端输入账号密码打开的shell进程;使用su - USERNAME
全局:对所有用户都生效;/etc/profile,/etc/profile.d/*.sh
用户个人:对当前用户有效;$HOME/.bash_profile
功用:定义环境变量;运行命令或脚本
bashrc类:为非交互式登录的shell进程提供配置
非交互式登录:su USERNAME;图形化界面打开的终端;运行脚本
全局:对所有用户都生效;/etc/bashrc
用户个人:对当前用户有效;$HOME/.bashrc
功用:定义变量;定义命令别名
交互式登录shell进程:/etc/profile--->/etc/profile.d/*.sh----->$HOME/.bash_profile---->$HOME/.bashrc---->/etc/bashrc
非交互式登录shell进程:$HOME/.bashrc----->/etc/bashrc-------->/etc/profile.d/*.sh
命令行中定义的特性,例如变量、别名作用域为当前shell进程的生命周期
配置文件定义的特性,只对随后启动的shell进程有效
让通过配置文件定义的特性立即生效:
(1)通过命令行重复定义一次
(2)让shell进程重新读配置文件
source CONF_FILE
. CONF_FILE