7.1、shell简介
7.1.1、shell是什么
shell也是一个应用程序,它连接了用户和Linux内核,让用户能够更高效、安全、低成本地使用Linux内核,这也是shell的本质
shell也是一种脚本编程语言
7.1.2、shell能做什么
1、连接用户和内核
2、还能连接其他程序
3、shell还支持编程
7.1.3、shell怎么样连接用户和内核
shell是通过调用内核提供的接口函数,来实现用户与内核之间的交互
7.2、shell的主要类型
常见的shell有sh、bash、csh、ash、dash等
sh
sh是UNIX系统上标准的shell,sh是第一个流行的shell
csh
csh的语法有点类似C语言,成为C shell
ash
一个简单的轻量级的shell,占用的资源少
bash
bash由GNU组织开发,保持了对sh shell的兼容,也是各种Linux发行版默认的配置的shell
查看shell
当前系统可用的shell都记录在/etc/shells文件中
cat /etc/shells
查看shell指向哪种解释器:
ls /bin/sh -l
如何切换sh的指向,指向到bash:
sudo dpkg-reconfigure dash
7.3、shell命令
7.3.1、进入shell的两种方式
1、进入Linux控制台
ctrl+Alt+Fn(1、2、3。。)
2、使用终端
7.3.2、shell命令的基本格式
命令提示符:
linux@linux-VirtualBox:~$
基本格式:
command [选项][参数]
1、使用选项:ls -l
2、使用参数:参数就是命令的操作对象 ls -l /bin/sh
3、一起使用
7.3.3、shell命令的本质
一个外部的应用程序是如何变成一个shell命令的?
shell在启动文件中增加了一个叫做PATH的环境变量,这个变量保存了shell对外部命令的查找路径,如果找不到对应的文件名,则直接报错
查看PATH环境变量的值:
echo $PATH
shell的内置命令本质是一个自带的函数
shell的外部命令本质是一个应用程序,执行外部命令就是启动一个应用程序
7.4、shell的特殊字符
7.4.1、通配符
*:代表任意长度的字符串 ,例如:ls f *
?:代表任意的单字符
[]:代表指定的一个字符范围 ls f[abcd] \ ls f[a-d]
*Text*
[ab-df]*
[ab-dm]?
??
7.4.2、引号
1、单引号
由单引号括起来的字符都作为普通字符出现,特殊字符被单引号括起来后,失去原有的意义。
echo '$PATH'
$PATH
2、双引号
双引号属于弱引用,双引号内有命令、变量等,会先把变量、命令解析出来结果,然后输出最终的结果
echo "$PWD"
/home/linux
3、注释符
单行注释:
直接在行的最前端加#即可
多行注释
1、eof截止符
:<<eof 注释代码 eof
echo "test"
echo "test"
echo "test"
:<<eof
echo "hello"
echo "hello"
echo "hello"
eof
2、感叹号
:<<!注释代码 !
3、逗号
: , 注释代码 ,
7.5、输入和输出
7.5.1、管道
将两个或者多个命令(程序、进程)连接在一起,把一个命令的输出作为下一个命令的输入
Linux下使用 | 连接多个命令,也成为管道符
command1 | command2 [|command3...]
find ~/ | grep "test"
7.5.2、重定向
改变默认的输出方式,可以由打印到屏幕改为写入文件
ls > test.txt
在输出重定向中,>表示复盖,>> 表示追加
管道和重定向的区别
重定向必须是由文件来接收输出,而管道可以由命令来接收输出
不能尝试:
command1 > command2 [|command3...]
7.6、shell编程
7.6.1、shell基本语法
shell变量
定义:
变量名=value
变量名='value'
变量名="value"
赋值号周围不能有空格
使用变量:
只要在变量前加入$即可
删除变量:
unset 变量名
7.6.2、shell程序的控制结构语句
if 条件1 then 如果条件1为真,则执行
elif 条件2 then 2为真,则执行
else 1、2、为假则执行
for 变量名 in 列表
do
命令
done
while 条件
do
命令
done
7.6.3、运行shell程序的方式
1、直接执行./test.sh
需要给shell程序用户的执行权限
chmod u+x test.sh
./test.sh
2、使用 bash test.sh
3、使用 . test.sh
执行方式 | 是否需要执行权限 | 是否以新进程运行脚本 |
---|---|---|
./test.sh | 需要 | 是 |
bash test.sh | ||
. test.sh |