history 5 # 列出最近五个记录
# !ls # 执行最后一次以ls开头的命令
变量:
- 环境变量:系统提供,不用定义,可以修改
- 内部变量:系统提供,不用定义,不能修改
- 用户变量:用户定义,可以修改
内部变量在程序中用来作出判断。在shell程序内这类变量的值不能i修改。如:
$# 传送给shell程序的位置参数的个数
$? 命令执行后返回的状态
$0 当前执行的进程的名称
$* 调用shell程序时所传送的全部参数组成的字符串
测试脚本:
echo "参数的个数是: " $#
echo "当前执行的进程的名称: " $0
echo "把传入参数作为一个字符串: " $*
注意:在给变量赋值时,等号两边一定不能留空格,若变量中本身就包含了空格,则整个字符串要用双引号括起来
在给变量赋值的过程中也是声明一个变量的过程
给某个变量设置只读属性 readonly
- 变量清除 unset
- 在shell脚本中通常使用$1 $2 $3 来访问第几个位置的参数
# 名字展示脚本
if [ $# -eq 0 ]
then
echo "没有提供名字"
else
echo "你的名字是 $1"
fi
- 特殊字符
字符 | 说明 |
$ | 直初shell变量名的开始 |
| | 把标准输出通过管道传送到下个命令 |
# | 标记注释开始 |
& | 在后台执行进程 |
? | 匹配一个字符 |
* | 匹配一个或多个字符 |
> | 输出重定向操作符 |
< | 输入重定向操作符 |
>> | 输出重定向操作符{添加到文件} |
<< | 跟在输入结束字符串后(HERE)操作符 |
[] | 列出字符的范围 |
[a-z] | 意指a到z的全部字符 |
[a,z] | 指a或者z字符 |
- 如下可以看出 单引号可以阻止解析环境变量
- 反斜杠\ 可以阻止shell把后面的字符解释为特殊字符。
- 使用反引号可以将执行命令的结果存入变量中
- . 和./的作用一样都是执行当前目录下的可执行文件
- 管道:可以通过管道把一个命令的输出传递给另一个命令作为输入。管道用竖杠 | 表示
格式 命令1 | 命令2
ls -l | grep "test.txt"
- $[] 表示形式告诉shell对方括号中的表达式求值
echo $[2+8]
echo $((2+8))
echo `expr 2 + 8`
- 赋值运算符
=
+=
-=
*=
/=
%=
&=
^=
|=
<<=
>>=
- read语句可以从键盘或文件的某一行文本中读入信息,并将其赋给一个变量
如果只指定一个变量,那么read将会把所有的输入赋给该变量,直到遇到第一个文件结束符或回车;
如果给出了多个变量,他们呢按顺序分别被赋予不同的变量,shell将用空格作为变量之间的分隔符
- test命令用于计算一个条件表达式的值,其经常在条件语句和循环语句中被用来判断某些条件是否满足
test expresion 或者 [expression]
-eq | 比较两个数是否相等 |
-ne | 比较两个数是否不等 |
-gt | 比较一个数是否大于另一个数 |
-ge | 比较一个数是否大于或等于另一个数 |
-lt | 比较一个数是否小于另一个数 |
-le | 比较一个数是否小于或等于另一个数字 |
-= | 比较两个字符串是否相等 |
!= | 比较两个字符串是否不相等 |
-z | 判断字符长度是否等于0,等于就是 “是” |
-n | 判断字符长度是否大于零,大于零则为"是" |
-e | 如果文件存在则为真 |
-r | 确定是否对文件设置了读许可 |
-w | 确定是否对文件设置了写许可 |
-x | 确定是否对文件设置了可执行许可 |
-s | 确定文件是否具有大于零的长度 |
-d | 确定文件是否为目录 |
-f | 确定文件是否为普通文件 |
-L | 确定文件是否为符号连接文件 |
exist read write excute size directory file link
- 逻辑操作符
逻辑操作符用来根据规则比较表达式。!, -a ,-o字符表示 NOT AND OR
! 求反逻辑表达式
-a 逻辑与表达式
-o 逻辑或表达式、
p78