1.Bash变量
用户定义变量 #局部变量
环境变量 #全局变量
位置参数变量
预定义变量
x=val #赋值
$x #调用
变量默认为字符型,不能直接运算
"$x" ${x} 变量叠加,即字符串
set #查看系统所有变量
-u 当变量不存在时报错
unset #清空变量
pstree #查看进程树
export x #把x变成环境变量
PATH="$PATH":/root
PS1变量
\d 显示日期 "星期 月 日"
\H 显示完整主机名
\t "HH:MM:SS"
\A "HH:MM"
\u 当前用户名
\w 当前所在目录的完整名称
\W 当前所在目录的最后一个目录
\$ 提示符
语系变量
echo $LANG #当前语系环境
locale -a | more #所有语系环境
/etc/sysconfig/i18n #默认语系环境,下次开机启用
位置参数变量
$n n为数字,$0表示命令本身,$1-$9表示第一到第九个参数,十个以上的${10}
$* 代表命令行中所有的参数,一个整体
$@ 命令行所有参数,分开看
$# 命令行参数的个数
预定义变量
$? 最后一次执行的命令的返回状态,为0则正确
$$ 当前进程pid
$! 后台运行的最后一个进程的pid
read [选项] [变量名]
-p "提示信息" : 输出提示信息等待输入
-t 秒数 : 指定等待输入时间
-n 字符数 : 只接受指定字符数的输入
-s : 输入不回显
2. 运算符
declare [+/-][选项] 变量名 #变量类型声明
+取消变量类型属性
-设定类型属性
-a 声明为数组
-i 整型
-x 环境变量
-r 只读 #声明为只读的变量完全不能操作!!!
-p 显示类型
声明数组
movie[0]=zp
movie[1]=tp
declare -a moive[2]=live
查看数组
echo ${movie}
echo ${movie[2]}
echo ${movie[*]}
export 变量名 <==> declare -x 变量名
declare -p #列出系统所有变量类型
数值运算
expr let
dd=$(expr $aa + $bb)
$((表达式))
ff=$(($aa+$bb))
$[表达式]
gg=$[$aa+$bb]
变量测试
#在脚本优化时使用
#具体访问www.imooc.com/video/6832
3. 环境变量配置文件(启动时按顺序加载)
source 配置文件 #. 配置文件
/etc/profile
/etc/profile.d/*.sh
~/.bash_profile
~/.bashrc
/etc/bashrc #里面定义了PS1,即登录提示符
umask #查看系统默认权限----w--w-
文件最高权限为666 #rw-rw-rw-
目录最高权限为777 #rwxrwxrwx
权限不能使用数字进行换算,而必须使用字母
umask定义的权限,是系统默认权限中准备丢弃的权限~
注销时生效的环境变量配置文件
~/.bash_logout #登出配置
~/.bash_history #保存历史命令,当前登录历史命令存放在内存
#/etc/profile HISTSIZE设置历史命令保存条数
登录文件 #只对本地终端有效
/etc/issue #登录警告信息
可以显示的转义符
\d 当前系统日期
\s 操作系统名字
\l 本机终端
\m 硬件体系架构
\n 主机名
\o 域名
\r 内核版本
\t 当前系统时间
\u 当前登录用户的序列号
远程终端欢迎信息 #不支持转义符
/etc/issue.net #在/etc/ssh/sshd_config加入"Banner /etc/issue.net"才能显示(重启sshd)
登录后显示信息 #本地远程均支持
/etc/motd
4. 条件判断
文件类型判断,是则真
-b 块设备
-c 字符设备
-d 目录
-e 存在为真
-f 普通文件
-L 链接文件
-p 管道文件
-s 非空为真
-S 套接字文件
test -e /root/install.log
[ -e /root/install.log ]
[ -d /root ] && echo yes || echo no
文件权限判断
-r 读
-w 写
-x 执行
-u SUID
-g SGID
-k SBit
两个文件之间进行比较
f1 -nt f2 判断f1的修改时间是否比f2新
f1 -ot f2 判断f1的修改时间是否比f2旧
f1 -ef f2 判断Inode是否一致(判断硬链接)
两个整数
-eq -ne -gt -lt -ge -le
字符串判断
-z 字符串 #为空则真
-n 字符串 #非空则真
字符串1 == 字符串2 #相等则真
字符串1 != 字符串2 #不等则真
条件语句
if [ 条件判断式 ];then
程序
fi
#或者
if [ 条件判断式1 ]
then
条件成立,程序1
elif [ 条件判断式2 ]
then
条件不成立,程序2
else
程序
fi
case语句
case $变量名 in
"val1")
part1
;;
"val2")
part2
;;
*)
part default
;;
esac
for循环
for 变量 in val1 val2 val3 ...
do
程序
done
for (( i=1;i<100;i=i+1 ))
do
程序
done
while&until循环
while [ 条件判断式 ]
do
程序
条件增量 #如 i=$(( $i+1 ))
done
until的条件判断式与while相反
5. 正则表达式
grep awk sed 包含匹配 #正则
ls find cp 完全匹配 #通配符
* 任意前个字符
匹配日期
[0-9]\{4\}-[0-9]\{2\}-[0-9]\{2\}
匹配ip
[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}
cut [选项] 文件名 #字段提取
-f 字段
-d 分隔符 #默认制表符
printf '输出类型输出格式' 输出内容
%ns 输出几个字符
%ni 几个数字
%m.nf 几位点几的浮点数
awk '条件1{动作1} 条件2{动作2}...' 文件名 #复杂
#df -h | grep "/dev/sda2" | awk '{print $5}' | cut -d "%" -f 1
#awk 'BEGIN{print "..."}{...}'
FS 指定分隔符
#cat /etc/passwd | grep /bin/bash | awk 'BEGIN{FS=":"}{print $1 "\t" $3}'
#cat student.txt | grep -v Name | awk '$4>=70{print $2}'
sed [选项] '[动作]' 文件名
#动作
-a 追加
-c 行替换
-i 行前插入
-p 打印
-s
-d 删除行
字符处理
sort [选项] 文件名
-f 忽略大小写
-n 以数值型排序
-r 反向排序
-t 指定分隔符
-k n[,m] 按指定字段排序,n开始m结束
wc [选项] 文件名
-l 行
-w 单词
-m 字符数
用户定义变量 #局部变量
环境变量 #全局变量
位置参数变量
预定义变量
x=val #赋值
$x #调用
变量默认为字符型,不能直接运算
"$x" ${x} 变量叠加,即字符串
set #查看系统所有变量
-u 当变量不存在时报错
unset #清空变量
pstree #查看进程树
export x #把x变成环境变量
PATH="$PATH":/root
PS1变量
\d 显示日期 "星期 月 日"
\H 显示完整主机名
\t "HH:MM:SS"
\A "HH:MM"
\u 当前用户名
\w 当前所在目录的完整名称
\W 当前所在目录的最后一个目录
\$ 提示符
语系变量
echo $LANG #当前语系环境
locale -a | more #所有语系环境
/etc/sysconfig/i18n #默认语系环境,下次开机启用
位置参数变量
$n n为数字,$0表示命令本身,$1-$9表示第一到第九个参数,十个以上的${10}
$* 代表命令行中所有的参数,一个整体
$@ 命令行所有参数,分开看
$# 命令行参数的个数
预定义变量
$? 最后一次执行的命令的返回状态,为0则正确
$$ 当前进程pid
$! 后台运行的最后一个进程的pid
read [选项] [变量名]
-p "提示信息" : 输出提示信息等待输入
-t 秒数 : 指定等待输入时间
-n 字符数 : 只接受指定字符数的输入
-s : 输入不回显
2. 运算符
declare [+/-][选项] 变量名 #变量类型声明
+取消变量类型属性
-设定类型属性
-a 声明为数组
-i 整型
-x 环境变量
-r 只读 #声明为只读的变量完全不能操作!!!
-p 显示类型
声明数组
movie[0]=zp
movie[1]=tp
declare -a moive[2]=live
查看数组
echo ${movie}
echo ${movie[2]}
echo ${movie[*]}
export 变量名 <==> declare -x 变量名
declare -p #列出系统所有变量类型
数值运算
expr let
dd=$(expr $aa + $bb)
$((表达式))
ff=$(($aa+$bb))
$[表达式]
gg=$[$aa+$bb]
变量测试
#在脚本优化时使用
#具体访问www.imooc.com/video/6832
3. 环境变量配置文件(启动时按顺序加载)
source 配置文件 #. 配置文件
/etc/profile
/etc/profile.d/*.sh
~/.bash_profile
~/.bashrc
/etc/bashrc #里面定义了PS1,即登录提示符
umask #查看系统默认权限----w--w-
文件最高权限为666 #rw-rw-rw-
目录最高权限为777 #rwxrwxrwx
权限不能使用数字进行换算,而必须使用字母
umask定义的权限,是系统默认权限中准备丢弃的权限~
注销时生效的环境变量配置文件
~/.bash_logout #登出配置
~/.bash_history #保存历史命令,当前登录历史命令存放在内存
#/etc/profile HISTSIZE设置历史命令保存条数
登录文件 #只对本地终端有效
/etc/issue #登录警告信息
可以显示的转义符
\d 当前系统日期
\s 操作系统名字
\l 本机终端
\m 硬件体系架构
\n 主机名
\o 域名
\r 内核版本
\t 当前系统时间
\u 当前登录用户的序列号
远程终端欢迎信息 #不支持转义符
/etc/issue.net #在/etc/ssh/sshd_config加入"Banner /etc/issue.net"才能显示(重启sshd)
登录后显示信息 #本地远程均支持
/etc/motd
4. 条件判断
文件类型判断,是则真
-b 块设备
-c 字符设备
-d 目录
-e 存在为真
-f 普通文件
-L 链接文件
-p 管道文件
-s 非空为真
-S 套接字文件
test -e /root/install.log
[ -e /root/install.log ]
[ -d /root ] && echo yes || echo no
文件权限判断
-r 读
-w 写
-x 执行
-u SUID
-g SGID
-k SBit
两个文件之间进行比较
f1 -nt f2 判断f1的修改时间是否比f2新
f1 -ot f2 判断f1的修改时间是否比f2旧
f1 -ef f2 判断Inode是否一致(判断硬链接)
两个整数
-eq -ne -gt -lt -ge -le
字符串判断
-z 字符串 #为空则真
-n 字符串 #非空则真
字符串1 == 字符串2 #相等则真
字符串1 != 字符串2 #不等则真
条件语句
if [ 条件判断式 ];then
程序
fi
#或者
if [ 条件判断式1 ]
then
条件成立,程序1
elif [ 条件判断式2 ]
then
条件不成立,程序2
else
程序
fi
case语句
case $变量名 in
"val1")
part1
;;
"val2")
part2
;;
*)
part default
;;
esac
for循环
for 变量 in val1 val2 val3 ...
do
程序
done
for (( i=1;i<100;i=i+1 ))
do
程序
done
while&until循环
while [ 条件判断式 ]
do
程序
条件增量 #如 i=$(( $i+1 ))
done
until的条件判断式与while相反
5. 正则表达式
grep awk sed 包含匹配 #正则
ls find cp 完全匹配 #通配符
* 任意前个字符
匹配日期
[0-9]\{4\}-[0-9]\{2\}-[0-9]\{2\}
匹配ip
[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}
cut [选项] 文件名 #字段提取
-f 字段
-d 分隔符 #默认制表符
printf '输出类型输出格式' 输出内容
%ns 输出几个字符
%ni 几个数字
%m.nf 几位点几的浮点数
awk '条件1{动作1} 条件2{动作2}...' 文件名 #复杂
#df -h | grep "/dev/sda2" | awk '{print $5}' | cut -d "%" -f 1
#awk 'BEGIN{print "..."}{...}'
FS 指定分隔符
#cat /etc/passwd | grep /bin/bash | awk 'BEGIN{FS=":"}{print $1 "\t" $3}'
#cat student.txt | grep -v Name | awk '$4>=70{print $2}'
sed [选项] '[动作]' 文件名
#动作
-a 追加
-c 行替换
-i 行前插入
-p 打印
-s
-d 删除行
字符处理
sort [选项] 文件名
-f 忽略大小写
-n 以数值型排序
-r 反向排序
-t 指定分隔符
-k n[,m] 按指定字段排序,n开始m结束
wc [选项] 文件名
-l 行
-w 单词
-m 字符数