CENTOS学习笔记:
一、shell 脚本基础-bash变量和逻辑运行
1、 终端:附着在终端上的接口程序
GUI:KDE ,GNone,Xfce
CLI: /etc/shells
bash
zsh
fish
2、bash的特性
命令展开:~,{}
命令别名:alias,unalias
命令历史:history
文件名统配:giob
快捷键:Ctrl+a ,u ,i ,l
命令补全:$ PATH
路径补全:
3、bash特性之:命令hash
记录上次查找结果内容并缓存 key-value(键值)
命令:hash 查看hash缓存
hash -d 删除hash缓存
hash -r 清空hash缓存
4、bash特性之: 变量
(1)程序:指令+数据
指令:由程序文件提供
数据:可以通过IO设备输入、 文件输入、管道、变量
(2)程序:算法+数据结构
变量: 变量名+指向的内存空间
变量赋值:name=value
变量类型:确定存储格式,表示数据范围,参与的运算
编程语言:
强类型变量 如C
弱类型变量 如bash 把所有变量视为字符类型:不支持浮点数据 除非借助外在工具
变量中无需事先声明,相当于把声明和赋值过程同时实现。
声明:说明变量名称,说明变量类型
变量替换:把变量名出现的位置替换为其所指向的内存空间中的数据
变量引用:$ {ver_name} ,$var_name
“” :弱引用,变量名会替换为其值。
‘’ :强引用,变量名不会替换为其值
变量名:变量命只能包含数字、字母和下划线,而且不能以数字开头;
变量名:见名知意,命名机制遵循某种法则,不能使用程序保留字,如if、else,then,while等;
bash变量类型:
本地变量: 作用域范围为当前shell进程;
环境变量:作用域为对当前shell进程及子进程;
变量赋值:(1)export name=value
(2)name=value export name
环境变量查看方式 ;export,declare -x, prinitenv, env ;
局部变量:作用域仅为某代码片段;
位置参数变量:当前执行脚本的shell进程传递参数;
特殊变量 :shell内置的有特殊功能的变量;
如 $ ?: 0,表示成功 1-255,表示失败;
查看变量命令:set
撤销变量:unset name
只读变量:
(1) declaer -r name
(2)readonly name
只读变量无法重新赋值,并不支持撤销:存活时间为当前shell进程生命周期,随shell进程终止而终止;
bash特性之多命令执行:
~]#command1;command2;command3…
逻辑运算:
运算数:只有真(true,yes,on,1)
假(false,on,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,
表示,comand1为‘假’则,command2不会执行,如果command1为‘真’,则command2必须执行;
~]#command1||command2,
表示:如果command1为‘真’,则command2不会执行,如果command1为‘假’,则command2必须执行;
二、bash基础及shell编程初步
shell脚本编程:
编程语言分类:根据运行方式
编译运行:源代码–>编译器(编译)–>程序文件
解释运行:源代码–>运行时启动解释器,由解释器边解释边运行;
根据其编程过程功能实现是调用库还是调用外部的程序文件;
shell脚本编程:利用系统上的命令及编程组件进行编程;
完整编程:利用库和编程组件进行编程;
根据编程模型:面向过程式编程语言,面向对象的编程语言;
程序=指令+数据
过程式:以指令为中心来组织代码,数据服务与代码;
顺序执行
选择执行
循环执行 代表:C,bash
对象式:以数据为中心来组织带买,围绕数据来组织指令;
类(class):实例化对象,method; 代表:java,C++,Pythy
shell脚本编程:过程时编程,解释运行,依赖于外部程序文件运行;
如何写shell脚本:
脚本文件的第一行,顶格,给出shebang,解释器路径,用于指明解释执行当前脚本的解释器程序文件;
常见的解释器:
#!/bin/bash
#!/usr/bin/python
#!/usr/bin/per
文本编辑器:全屏编辑器 nano 、vi、vim 行编辑器,sed
shell脚本是什么:
各种命令的堆积,由于很多命令不具有幂等性,需要用程序逻辑来判断运行条件是否满足,以避免其运行中发生错误;
运行脚本:
(1)赋予执行权限,并直接运行此程序文件;、
chmod +x /PATHTO /SCARIPT_FILE
(2) 直接运行解释器,将脚本以命令行参数传递给解释器程序
bash /PATHTO /SCARTIPT_FILE
注意:脚本中的空白行会被解释器忽略
脚本中,除了shebang,余下所有以#开头的行都会被视作注释行而被忽略;此及为注释行;
shell脚本的运行时通过运行一个子shell进程实现的;
练习1:写一个脚本,实现如下功能;
(1)显示/etc目录下所有以大写P或小写p开头的文件或目录本身
(2)显示/var目录下所有文件或目录本身,并将显示结果中小写字母转换成为大写后显示;
(3)创建零时文件/tmp/myfile.xxx
bash的配置文件:
两类:(profele):为交互式登录进程提供配置
(bashrc):为非交互式登录进程提供配置
登录类型
(1)交互式登录shell进程:直接通过某终端输入账号密码登录打开的shell进程;
使用su命令:su - USERNAME 或者使用su - l USERNAME执行的登录切换;
(2)非交互式登录shell进程:su USERNAME执行的登录切换;
图形界面下打开的终端
运行脚本
profile类:
全局:对所有用户都生效;只有管理员可修改全局配置文件
/etc/profile ,/etc/profild.d/*.sh
用户个人:仅对当前用户有效:
~/bash/profile
功用:1、用于定义环境变量;
2、运行命令或脚本
bashrc类:
全局:etc/bashrc
个人用户:
~/.bashrc
功用:1、定义本地变量
2、定义命令别名
交互式登录shell进程读取顺序:
/etc/profile-->/etc/profile.d/*-->~/.bash.profile-->~/.bashrc-->/etc/bashrc
非交互式登录shell进程读取顺序:
~/.bashc–>/etc/bashrc–>/etc/profile.d/.sh
命令行中定义的特使,例如变量和各种作用域为当前shell进程的生命周期;配置文件定义的特性,只对随后重新启动的shell进程有效;
让通过配置文件定义的特性立即生效方式:
(1)通过命令行重复定义一次
(2)让shell进程重读配置文件
如:~]#souce /PATH/FROM/CON_FILE 或 ~]# . /PATH/FROM/CONF.FILE
问题1:如何定义对所有用户都生效的别名,例如:ifftp=‘ftp 172.16.0.1/pub’?
问题2ÿ