bash(第一章)
简介
bash 是一个为GNU计划编写的Unix shell。它的名字是一系列缩写:Bourne-Again SHell — 这是关于Bourne shell(sh)的一个双关语(Bourne again / born again)。
bash 指的就linux常用的shell脚本语言,
这个常见于脚本第一行 : #!/bin/bash或者 #!/bin/sh
terminal:终端用来启动shell环境 。
shell命令:用户向系统内核发起控制请求。
shell脚本:shell命令的有序集合。
bash:Linux中shell种类很多,bash就是其中一种。
参数说明
-c
若用-c参数,则bash从字符串中读入命令,如果字符串后还有变量就被设定为从$0开始的位置参数。
-n
检测脚本是否正确,并不执行脚本
-i
若用-i参数,则bash是交互的。
-s
若用-s参数,则bash从标准输入中读入命令(在执行完-c带的命令之后。)直到输入exit。
-x
执行脚本,输出执行过程,调试利器
- 单一的号表明参数执行完毕,并且屏蔽此后所跟参数,后面的所有变量都被看作是文件名。
-norc
如果bash是交互的,则不执行个人初始化文件:-/.bashrc,如果bash作为sh来运行,这个参数缺省是关闭的。
-noprofile
不执行系统范围的启动文件/etc/profile也不执行个人的启动文件-/.bash_profile,-/.bash_login或-/.profile,缺省情况下,bash作为登录的shell时以这些文件作为启动文件。
–refile文件名
如果bash是交互的,则以此文件作为bash的启动文件。替代-/.bashrc。
-version
在bash开始时显示此bash的版本号。
-quiet
不显示版本号和其他信息,这是缺省值。
-login
激活bash,伪装为登录shell。
-nobraceexpansion
不执行大括号扩展。
-nolineediting
在交互状态下不使用GNU的readline库去读取命令。即取消了命令行编辑功能。
-posix
改变bash的行为,使其符合Posix 1003.2规定的标准。
举个例子1
#bash -n database.sh #检测脚本是否正确,并不执行
#bash -x database.sh #执行脚本,输出执行过程
终端,附着在终端的接口程序:
GUI:KDE, GNome, Xfce
CLI:/etc/shells
bash
zsh
Fish
bash的特性:
命令行展开:~, {}
命令别名:alias, unalias
命令历史:history
文件名通配:glob
快捷键:Ctrl+a, e, u, k, l
命令补全:$PATH
路径补全:
bash特性:命令hash
缓存此前命令的查找结果:key-value
key:搜索键
value:值
hash命令:
hash:列出
hash -d COMMAND:删除
hash -r:清空
bash的特性之:变量
程序:指令+数据
指令:由程序文件提供;
数据:IO设备、文件、管道、变量
变量
程序:算法+数据结构
变量名+指向的内存空间
String name ;
name ="";
string name= “”;
变量赋值:name=value
变量类型:存储格式、表示数据范围、参与的运算
编程语言:
强类型变量:强类型意思:有明确的严格的变量类型的规范。并且需要强制类型转换才可以进行类型的变换的语言 如 Java C#
弱类型变量:没有明确的类型区分 如:Javascript等
bash把所有变量统统视作字符型;
bash中的变量无需事先声明;相当于,把声明和赋值过程同时实现;
声明:类型,变量名
变量替换:把变量名出现的位置替换为其所指向的内存空间中数据;
变量引用:${var_name}, $var_name
变量名:变量名只能包含数字、字母和下划线,而且不能以数字开头;
变量名:见名知义,命名机制遵循某种法则;不能够使用程序的保留字,例如if, else, then, while等等;
bash变量类型:
本地变量:作用域仅为当前shell进程;
环境变量:作用域为当前shell进程及其子进程;
局部变量:作用域仅为某代码片断(函数上下文);
位置参数变量:当执行脚本的shell进程传递的参数;
特殊变量:shell内置的有特殊功用的变量;
$?:
0:成功
1-255:失败
本地变量:
变量赋值:name=value
变量引用:${name}, $name
"":变量名会替换为其值; 软(弱)引用
'':变量名不会替换为其值;强引用,变量引用不执行替换;
查看变量:set
撤销变量:unset name
注意:此处非变量引用;
环境变量:
变量赋值:
(1) export name=value
(2) name=value
export name
(3) declare -x name=value
(4) name=value
declare -x name
变量引用:${name}, $name
注意:bash内嵌了许多环境变量(通常为全大写字符),用于定义bash的工作环境
PATH, HISTFILE, HISTSIZE, HISTFILESIZE, HISTCONTROL, SHELL, HOME, UID, PWD, OLDPWD
查看环境变量:export, declare -x, printenv, env
撤销环境变量:unset name
–