课程名称:Linux达人养成计划 I
章节名称:第9章 Shell基础
讲师名称:Tony
Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁。Shell 既是一种命令语言,又是一种程序设计语言。
Shell 是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服务。
Shell 脚本(shell script),是一种为 shell 编写的脚本程序。业界所说的 shell 通常都是指 shell 脚本,但读者朋友要知道,shell 和 shell script 是两个不同的概念。
Shell 编程跟 JavaScript、php 编程一样,只要有一个能编写代码的文本编辑器和一个能解释执行的脚本解释器就可以了。
Linux 的 Shell 种类众多,常见的有:
Bourne Shell(/usr/bin/sh或/bin/sh)
Bourne Again Shell(/bin/bash)
C Shell(/usr/bin/csh)
K Shell(/usr/bin/ksh)
Shell for Root(/sbin/sh)
等等
在一般情况下,人们并不区分 Bourne Shell 和 Bourne Again Shell,所以,像 #!/bin/sh,它同样也可以改为 #!/bin/bash。
#! 告诉系统其后路径所指定的程序即是解释此脚本文件的 Shell 程序。
Shell 的 echo 指令与 PHP 的 echo 指令类似,都是用于字符串的输出。命令格式:
echo string
示例:
// 显示普通字符串 echo "It is a test" // 显示转义字符 echo "\"It is a test\"" //显示变量 #!/bin/sh read name echo "$name It is a test" //显示换行 echo -e "OK! \n" # -e 开启转义 echo "It is a test" //显示结果定向至文件 echo "It is a test" > myfile //原样输出字符串,不进行转义或取变量(用单引号) echo '$name\"' //显示命令执行结果 echo `date` //这里使用的是反引号 `, 而不是单引号 '。
chmod +x ./test.sh #使脚本具有执行权限 ./test.sh #执行脚本
注意,一定要写成 ./test.sh,而不是 test.sh,运行其它二进制的程序也一样,直接写 test.sh,linux 系统会去 PATH 里寻找有没有叫 test.sh 的,而只有 /bin, /sbin, /usr/bin,/usr/sbin 等在 PATH 里,你的当前目录通常不在 PATH 里,所以写成 test.sh 是会找不到命令的,要用 ./test.sh 告诉系统说,就在当前目录找。
这种运行方式是,直接运行解释器,其参数就是 shell 脚本的文件名,如:
/bin/sh test.sh /bin/php test.php
Linux alias命令用于设置指令的别名。用户可利用alias,自定指令的别名。若仅输入alias,则可列出目前所有的别名设置。
alias的效力仅及于该次登入的操作。若要每次登入是即自动设好别名,可在.profile或.bshrc中设定指令的别名。
alias[别名]=[指令名称]
Linux unalias命令用于删除别名。unalias为shell内建指令,可删除别名设置。
//1、写入环境变量配置文件 vi ~/.bashrc //2、不重启,直接生效 source ~/.bashrc
第一顺位执行用绝对路径或相对路径执行的命令。
第二顺位执行别名。
第三顺位执行Bash的内部命令。
第四顺位执行按照$PATH环境变量定义的目录查找顺序找到的第一个命令
快捷键 | 作用 |
---|---|
ctrlt + c | 强制终止当前命令 |
ctrl + l | 清屏 |
ctrlt + a | 光标移动到命令行首 |
ctrlt + e | 光标移动到命令行尾 |
ctrlt + u | 从光标所在位置删除到行首 |
ctrlt + z | 把命令放入后台 |
ctrlt + r | 在历史命令中搜索 |
histor y命令来自于英文单词历史,其功能是用于显示与管理历史命令记录。Linux 系统默认会记录用户所执行过的所有命令,可以使用 history 命令查阅它们,也可以对其记录进行修改和删除操作。
# 将本次缓存区信息写入到历史文件中(~/.bash_history) history -w # 清空本次缓冲区及历史文件中的信息 history -c # 将历史文件中的信息读入到当前缓冲区中 history -r # 将本次缓冲区信息追加写入到历史文件中(~/.bash_history) history -a # !+关键字 执行最后一条以关键字开头的命令 service network restart !ser