一、test命令内置选项
-d 检查文件是否存在以及该文件是否是目录文件
-e 检查文件是否存在
-f *** ***该文件是否是一个普通文件
-r *** ***该文件是否可读
-s *** ***该文件是否大于0字节
-w *** ***该文件是否可写
-x *** ***该文件是否可执行
二、gcc调试选项
gcc -g 选项使得生成的可执行文件具有gdb调试特性
三、内置的符号命令
() 子shell
$() 命令替换
(()) 算术表达式计算,let的同义词(当被括号的值中包含等号时使用)
$(()) 算术展开(不用于被括起来的指中包含等号的情形)
[] test命令
[[]] 条件表达式,类似于[],但是添加了字符串比较
四、重定向
0< 标准输入重定向
1> 标准输出重定向
2> 标准错误输出重定向
文件描述符 是程序发送输出和获取输入的地方。当执行一个程序时,运行该程序的进程打开3个文件描述符,分别是0(标准输入)、1(标准输出)和2(标准错误输出)。
重定向输出符号(>)是1>的简写,它通知shell将标准输出重定向。类似地,<是0<的简写,表示将标准输入重定向。符号2>将标准错误输出重定向。
五、参数和变量
shell变量、用户创建的变量、关键字变量(HOME,PATH)、位置参数变量(引用方式:$!,$?,$#)
无论何时,用户输入的一行命令中的每个参数都将成为位置参数的值。
set可以用来对位置参数赋值。
变量属性:
1.readonly使变量值不可变更
2.declare和typeset为变量赋予属性
变量属性(typeset或者declare)
属 性 含义
-a 声明一个数组变量
-f 声明一个函数名变量
-i 声明一个整型变量
-r 声明变量为只读,也可用readonly
-x 输出变量(设置为全局变量),也可用export
当用户登录之后,shell继承了用户的主目录路径名并将其赋值给变量HOME
PS1:用户主提示符
$ echo $PS1
/[/e]0;/u@/h: /w/a/]${debian_chroot:+($debian_chroot)}/u@/h:/w/$
PS2:用户次提示符
$echo "$PS2"
>
PS3:菜单提示符
PS3保存了用于select控制结构的菜单提示符
PS4:调试提示符
$echo "$PS4"
+
IFS:分隔输入字段(分词)
e.g
heqiangtheqiang-desktop:~$IFS=p
heqiangtheqiang-desktop:~$aa=export
heqiangtheqiang-desktop:~$echo $aa
ex ort
heqiangtheqiang-desktop:~$cat $aa
cat: ex: 没有那个文件或目录
cat: ort: 没有那个文件或目录
shell特殊字符
换行符 启动命令的执行
; 分隔命令
() 由子shell执行的分组命令,或是标示函数
& 在后台执行命令
| 将前一命令的标准输出发送给其后面的命令的标准输入(管道)
> 重定向标准输出
>> 追加标准输出
< 重定向标准输入
<< Here文档
* 模糊文件引用中的零个或者多个字符组成的串
? 模糊文件引用中任何单个字符
/ 引用后面的字符
‘ 引用字符串,组织所有替换
“ 引用字符串,只允许变量替换和命令替换
'...' 执行命令替换
[] 模糊文件引用中的字符类别
$ 引用某个变量
. 执行命令
# 开始一行注释
{} 用来封装函数体
:(内置空串) 返回true
&&(布尔与) 只有左边的命令成功才执行右边的命令
||(布尔或) 只有左边的命令失败才执行右边的命令
!(布尔非) 反转命令的退出状态值
$() 执行命令替换
[] 计算算术表达式的值
六、函数
shell将函数存放在内存(RAM)中,所以shell访问函数的速度要比访问脚本速度快得多,shell还对函数预处理
七、命令行展开
1.展开顺序
2.花括号展开
$echo chap_{one,two,three}.txt
chap_one.txt chap_two.txt chap_three.txt
3.代字符展开
$ echo ~
/home/heqiang
4.参数展开和变量展开
5.算术展开
$((expression))
6.命令替换
$(command)
7.分词 IFS
8.路径名展开
在上学期学习网络操作系统(Redhat 9.0)的时候,老师给我们讲shell用了两节课,当时由于对基础掌握程度太差,听的很差劲。最后老师让分析开机过程/etc/inittab这个脚本时,基本上都看不懂。所以,我决定狠狠把shell基础这块弄懂,然后去看系统中一些服务的配置文件,通过这种方式,第一:我想能够巩固对shell基础的掌握,第二:不容易忘记所学的命令。或许在我现在看来,能熟练应用一个linux系统的标准就是能够把这个系统的一系列管理和配置的命令用的很熟,其次,能够自己写出一些控制脚本来管理系统。
在了解了这么多shell的基本命令和用法之后,觉得要真正掌握这些技术并不难,但需要坚持练习和使用,相信自己能够做到~