1 shell
弱类型、解释型语言。解释器:bash
2 变量
bash变量类型
1. 环境变量
2. 本地变量(局部变量):只属于某一个bash的变量;
3. 位置变量
4. 特殊变量(系统变量):bash内置的用来保存某些特殊数据的变量。
2.1 本地变量
var_name=值
- 作用域:整个bash进程
2.2 局部变量
local var_name=值
- 作用域:当前代码段
2.3 环境变量
export 名字=值
- 作用域:当前shell和其他shell
2.4 位置变量
用于脚本执行的参数,$1
表示第一个参数,以此类推
2.5 特殊变量
$?
,上一个命令的执行状态返回值
一、程序有2类返回值
(1)执行结果
(2)执行状态,$?,0:表示正确;1-255:错误
二、输出重定向:
(1)> 覆盖重定向
(2)>>追加重定向
(3)2>错误覆盖重定向
(4)2>>错误追加重定向
(5)&>全部重定向
$#
,传递到脚本的参数个数$*
,传递到脚本的参数,与位置变量不同,此选项参数可超过9个$$
,脚本运行时当前进程的ID号,常用作临时变量的后缀,如haison.$$
;$!
,后台运行的(&)最后一个进程的ID号$@
,与¥#相同,使用时加引号,并在引号中返回参数个数$-
,上一个命令的最后一个参数$?
,最后命令的退出状态,0表示没有错误;
2.6 查看shell中的变量
set
命令
2.6.1 查看shell中的环境变量
printenv
env
export
2.7 引用变量
${变量名}
,一般可以省略{}
2.8 引号
- 单引号:强引用,不作变量替换
- 双引号:弱引用,做变量替换
- 反引号:
``
命令替换
3 脚本
命令的堆砌。
脚本可以有后缀(.sh),可以省略
3.1 练习1
- 第一行
#!/bin/bash
,魔术,类似声明; - 这里
$1
是位置变量
添加执行权限:chmod u+x test1.sh
脚本的另一种执行方式
3.2 条件判断
3.2.1 条件表达式
- [expression]
- test expression
3.2.2 整数比较
-eq
,比如:[$A -eq $B]
-ne,-gt,-lt,-ge,-le
3.2.3 命令的逻辑关系
在linux中命令执行状态:0为真,其他为假
3.2.4 与或非
- 逻辑与 &&,第一个条件为假,第二个不用再判断。
- 逻辑或 ||
- 逻辑非 !
3.3 练习2
3.4 条件判断,控制结构
if 条件 ;then
语句
elif 条件;then
语句
else
语句
fi
-a
,逻辑与,并且,if [$# -gt 1 -a $# -lt 3 -o $# -eq 2];then
-o
,或者
3.5 练习3
如果/etc/inittab 文件的行数大于50,显示文件很大
3.6 检查 脚本
bash -n shell文件
,检查文件是否有语法错误bash -x shell文件
,debug执行文件
3.7 Shell中如何算术运算
- let 算术运算符表达式,
let C=$A+$B
$[算术表达式]
,C=$[$A+$B]
$((算术表达式))
,C=$(($A+$B))
expr 算术表达式
,注意:表达式中各操作数及运算符之间要有空格,而且要使用命令引用。
3.8 练习4
给定一个用户,获取其密码警告期限,然后判断用户密码使用期限是否已经小于警告期限,如果小于,则显示“WARN”,否则显示密码还有多少天到期。
4 文件测试
e FILE
,测试文件是否存在-f FILE
,测试文件是否为普通文件-d FILE
,测试文件是否为目录-r
,权限-w
-x
4.1 特殊变量
$#
$@
4.2 字符串测试
==
,等号两边需要空格!=
-n string
,判断字符串是否为空-s string
,判断字符串是否不空
4.3 循环
for 变量 in 列表 ;do
语句
done
4.4 如何生成列表
- {1..100}
seq [起始数] [跨度数] 结束数
ls /etc 文件列表
- 练习,依次向/etc/passwd 中每个用户问好:hello 用户名,并显示用户名的shell
- 计算100以内所有能被3整除的整数的和
- 传给脚本一个参数:目录,输出该目录中文件最大的文件名和文件大小