BASH融合了:ksh,csh 并避免其缺陷
编程语言:
1.脚本语言:
以源程序的方式存在,执行前不需要编译,
而靠一个解释器执行
为何简便,但执行效率差
bash,perl, python, ruby, php
perl最晦涩 python面向对象语法严格
2.编译型语言:
编辑——>编译——>连接——>运行
1、静态组合 2、动态组合
执行效率高,但维护复杂
c, c++,-接近硬件底层
BASH常用命令:
1、命令行编辑
快捷键: Ctrl+a ;直接跳到命令行首
Ctrl+e ;行尾
Ctrl+u ;删除从光标到行首
Ctrl+k :删除从光标到行尾
Ctrl+箭头 :跳一个单词
2、文件名统配
通配符:
*:表示任意长度的任意字符 例:ls * ; ls *.log
?: 任意单个字符 例 : ls ?.log
[]:指定范围内的任意单个字符, [a-z] [abc]
例: ls [abc].log
[^abc], ^:表示取反 不包括abc
[a-zA-z0-9]指定字符范围
[:keyword:] : [:lower:],[:upper:],[:punct:],
[:space:],[:alpha:].[:alnum:][:digit:]-(数字)
man 7 glob :可以上查看所有
[^[:alpha:]] :: "^"表示取反
3、命令补全和路径补全
命令补全:
echo $PATH 定义的路径下找到命令进行补全.
路径补全:
指定的路径下
4、命令行展开
~ :展开为对应用户的家目录
cd ~到家目录
{}:展开多条路径
mkdir -pv x/{y,z/{1,2}}
mkdir -pv {x,y}_{1,2} 多项展开
5、命令展开/命令扩展
$():意义同下
`` 反引号: 把一个命令的执行结果当成一个命令的
对象来使用
例: mkdir #(date"+%Y-%m-%d-%H-%M-%S")
ls -l `which passwd`
脚本::命令的堆砌
bash脚本:
编写:
#!/bin/bash , (-称为shabang)
#
DIR=`/tmp/scrips2`
mkdir -v $DIR
unset DIR (施放变量)
除第一行"#"外 其他为注释
脚本中变量: 脚本执行完施放脚本中所有变量.
脚本的执行: 要有执行权限 (当前目录下输入./'脚本名' 或输入 bash '脚本名')
脚本的调试: bash -n '脚本名' 用于检查是否有语法错误.
bash -x '脚本名' 用于跟踪脚本执行的过程.
变量:命名的内存空间 通常只对当前shell有效
变量引用:"" 用双引号引用
"" : 为弱引用 touch "a b" 可以进行变量替换.
'' :为强引用 touch '$ab' 不会进行变量替换.
"\ "避免被解释 例: 显示"$" 使用"\$".
bash,变量不需要声明,变量不区分类型,默认字符串型,不能直接参与数学运算。
例: 变量名=“string”
set 变量名=“string”
unset 变量名
定义变量:
NAME=Jerry
echo $NAME 显示变量值
echo ${NAME} 标准格式
echo:
-n :不显示换行符
-e :转义符
man echo 中有详细介绍
1、变量分为本地变量/局部变量
2、环境变量 对当前shell 对子shell都有效,可在shell中打开子shell
export,导出一个变量
export A=3 := : A=3 export A
查看:
export,显示当前所有变量 declare,声明变量
DISPLY,定义显示
HISTSIZE,历史命令保存条数
HOME,定义当前用户的家目录
PATH, :隔开
OLDPWD,PWD
SHELL
env,可显示当前变量,在某个特定环境下运行某命令
3、特殊变量
bash内置变量
$* 用于引用所有位置参数,每一个变量是一个独立的字符串
$@ 用于引用所有位置参数,把所有的变量当做一个字符串
$# 用于引用命令行传递的位置参数的个数
$0 表示脚本名字自身 eg:echo “basename$0"(basename用于命令替换)
$$ 当前进程的进程号
$? 用于引用上一个命令的执行状态结果,echo ”$?" 0表示成功,
大于0表示错误,错误有不同返回值
$_ 用于引用脚本中最后一个命令的参数
$! 最后执行的后台命令的PID
$- 用于引用当前脚本中命令的选项的引导符
4、位置变量
$1,$2,$3 当数值大于10时用 ${n}表示
例:
#!/bin/bash
#
echo "$1+$2=$[$1+$2]"
echo "$1-$2=$[$1-$2]"
echo "$1/$2=$[$1/$2].$[$1%$2*10/$2]"
echo "$1*$2=$[$1*$2]"
变量执行数学运算::
echo "$[$A+$B]" / echo "$(($A+$B))"
5、read: 等待用户从键盘输入一个值,并赋给一个指定的变量
read A 键盘输入 保存到A
read -p "XXXX" A 显示 "XXXX" 等待键盘输入变量A的值
read [option] VAR1 VAR2 VAR3
-t 等待输入时间 超时时间间隔
-p 在输入前打印一个值 "..."
-a 把读入的信息保存在数组当中
6、BASH的命令别名:
alias,
例:alias cls=clear
alias cdnet=’cd /etc/sysconfig/network-scripts'
撤销: unalias cdnet (未保存,没有永久性,重启失效)
保存:
全局,局部. 应用范围越小越有效.
全局,/etc/profile,/etc/profile.d/*,/etc/bashrc
局部,~/.bash_profile,~/.bashrc,~/.bash_logout
1、profile类:
设置环境变量, 即运行用户登陆是要执行的一些命令
2、bashrc类
设置别名
设置本地变量,只对当前shell有效不对子shell有效
Shell的分类::
1、交互式登陆式shell
登陆过程:
1、/etc/profile (PATH) ——>/etc/profile.d/*——
>~/.bash_profile ——>/etc/bashrc
越后优先级越高
2、非交互式登陆shell
系统自动执行的,不需用户登陆的
~/.bashrc ——>/etc/bashrc ——>/etc/profile.d/*
重读配置文件:
source /etc/profile
. /etc/profile
(可能会影响其他变量使用)