shell处于kernel的外层,用来负责接收使用者输入的命令,然后将命令解释成kernel能了解的方式,然后由kernel去执行,再将结果传回默认的输出周边。shell是一种命令解释器,同时也是一个程序语言。shell有很多种,在众多的Linux发行版中,标准的shell是bash,也是我们学习的主要对象。
基础概念部分
登陆主机
登陆主机分为本地登陆和远程登陆。
本地登陆:就是直接面对主机,由键盘输入用户密码登陆,使用tty1-tty6,或者图形界面tty7
远程登陆:通过网络连接主机,以虚拟终端的方式登陆,使用ssh
退出登陆
1.使用命令exit
2.使用【Crtl+D】退出
文件
在Linux中,任何东西包括硬件都视为文件。文件可以分为几种:
一般文件:纯文本文件,二进制文件。如果文件具有执行权限,称为执行文件。
目录:包含文件。
设备文件:字符文件,磁盘文件。
内部进程通信文件:socket文件,连接文件(pipe、fifo)两种。
特殊文件:符号链接文件,soft link或者symbolic link
隐藏文件:文件名的第一个字符是一个点(.)
常见文件代码:
- 一般文件
d 目录
l 符号链接文件
b 块文件
c 字符文件
s socket文件
p 管道文件
目录
目录也是文件的一种,目录中可以包含子目录和文件。
通配符
通配符是指一种文件名的样式,可用来对比文件名,以找到相符的文件。
* 代表任意的字符串,可以是空字符串
? 代表一个字符,但不可以为空
转义符
反斜线 \ 是转义字符,也叫做“逃逸字符”,目的在于使后接的字符回复原来作为单纯字符的用途。
字符集合
[abc] 代表a,b,c中任意的一个字符
[a-z] 代表a到z中的任意一个字符,小写英文字母
[A-Z] 代表大写英文字母
[A-Za-z] 代表字母
[0-9] 代表数字
[a-z_-] 代表任意一个小写英文字母,_ 或者 -
[!0-9] 代表非数字
[0-9!] 代表数字或感叹号
[\!0-9] 代表数字或感叹号
括号扩展
{g,nc,s}ftp 代表gftp ncftp sftp
shell程序的基本组成结构
shell结构大体是由设定变量、内置命令、shell的语法结构、函数组成。
使用实例说明:test.sh
- #!/bin/bash
- #说明使用/bin/bash作为这个脚本的解释器
- #定义一个函数
- function my_fun () {
- echo "Hello, $1,today is $2"
- }
- #定义连个变量
- name=$1
- today=`date`
- #函数调用
- my_fun "$name" "$today"
上面的这个脚本要想运行还需要做一些操作,首先给予执行权限
chmod +x test.sh
然后执行
./test.sh john
输出
Hello, john,today is Tue Jun 1 14:51:46 CST 2010
父shell和子shell
在执行script之前,身处的环境就是父shell。执行script之时,父shell根据#!/bin/bash,fork出来一个新的shell环境,然后在子shell中执行,执行完毕后子shell结束,任然回到父shell中,这样不会影响到父shell的环境。
login shell 和non-login shell
这张图片是login shell的流程,当是non-login shell时,只执行方框中的标注的部分。由这张图我们可以知道,在如下几种情况下,执行的流程。
登陆(login)
/etc/profile
~/.bash_profile
注销(logout)
~/.bash_logout
执行新shell,分成两种情况
1.执行交互式的shell
~/.bashrc
/etc/bashrc
2.执行非交互式的shell,比如执行script
会检查 BASH_ENV 变量的内容,如果有定义,则执行