Shell 的 历史:
- 1977年 Bourne Shell发布,并作为UNIX 7的默认Shell。
- 由于BourneShell 一直没有正式的版本号且交互性不好, 加州大学伯克利分校的一名学生编写了 C Shell,由于不支持正则表达式,so没在UNIX中广泛使用。
- 20世纪80年代初,出现了Korn Shell,成为AIX4上的默认的Shell
- 20世纪80年代末,出现了Bash Shell,作为GNU项目免费公布使用。查看下系统的Shell 及其 版本吧。(Ubuntu 16)
一、第一个Shell脚本
(1)编写脚本
(2)运行脚本
① bash
② 使用 “./”
如果想该脚本成为默认的系统命令
简单地将该脚本复制到任意系统$PATH变量所包含的目录中,同时赋予可执行权限。
比如:
chmod +x HelloWorld.sh
mv HelloWorld.sh /bin/
HelloWorld.sh
(3)脚本排错
二、Shell的内建命令
所谓Shell内建命令,就是由Bash自身提供的命令,而不是文件系统中的某个可执行文件。
(自身所拥有的能力,而不是通过外部)
比如:bash, :, .,[ ,alias,bg,bind,break,builtin,cd,command。。。
常用的内建命令
(1)如何确认内建命令:type
(2)执行程序: ” . ”
用于执行某个脚本,甚至脚本没有可执行权限也可以运行。
(3)别名:alias
alias可用于创建命令的别名,若直接输入该命令且不带任何参数,则列出当前用户使用了别名的命令。
比如:ll 等于 ls -l
(5)任务前后台切换:bg、fg、jobs
比如打包某个占用较大空间的目录,若在前台执行,在任务完成前将会一直占用当前的终端,而导致无法执行其他任务,此时就应该将这类任务放置后台。
(6)cd
改变当前工作目录。如果不加参数,默认会进入当前用户家目录。
(7)声明变量:declare 、typeset
两个命令一样,都是用来声明变量的。
(8)echo
用于打印字符。该命令会打印出引号中的内容,并在最后默认加上换行符。
(9)跳出循环:break
从一个循环(for、while、until或者select)中退出。
break n
(10)循环控制:continue
停止当前循环,并执行外层循环(for、while、until或者select)的下一次循环。
(11)声明局部变量:local
该命令用于在脚本中声明局部变量,典型用法是用于函数体内。
如果在函数外使用local声明变量,则会提示错误
(12)从标准输入读取一行到变量:read
Tips
如果不指定变量,read命令会将读取的值放入环境变量REPLY中。(read是按行读取的,用回车符区分。)
(13)向左移动位置参数:shift
参数 | 说明 |
$0 | 脚本名本身 |
$1 (2 3 … n) | 脚本的第一个参数,第二个参数……第n个参数 |
$# | 变量总数 |
$* | 显示所有参数 |
$@ | 显示所有参数 |
$? | 前一个命令的退出的返回值 |
$! | 最后一个后台进程的ID号 |
shift 可以对参数做偏移