Linux Bash Shell编程(一):Shell概述与Hello World实现
Shell 概述
Shell是一个命令行解释器,它为用户提供了一个向Linux内核发送请求以便运行程序的界面系统级程序,用户可以用Shell来启动、挂起、停止并编写一些程序。与Windows中以图形界面形式存在的交互相同,同样用于用户命令/程序与系统之间的交互
Shell分类
- Bourne Shell 1979年起Unix使用的Shell,主文件名sh
- C Shell 主要在BSD版Unix系统中使用,其语法和C语言相类似
两种语法类型不兼容,两种Shell及其衍生型由此分为两类:
- Bourne Shell系主要包括sh、ksh、Bash、psh、zsh
- C Shell系主要包括csh、tcsh
查看系统支持的Shell
系统支持Shell在文件/etc/shells
中
cat /etc/shells
# /etc/shells: valid login shells
/bin/sh
/bin/bash
/usr/bin/bash
/bin/rbash
/usr/bin/rbash
/bin/dash
/usr/bin/dash
/bin/zsh
/usr/bin/zsh
/usr/bin/tmux
/usr/bin/screen
返回值如上,其中
-
sh即为Bourne Shell,较早,在单用户模式以及修复模式中可以看到
-
bash是Linux系统中的主流shell,带有
<username>@<hostname>:<dir>$
的经典提示符 -
zsh,据使用过的前辈反馈其功能强大、使用舒适,但配置繁琐,又有推荐oh my zsh,极度简化配置,有兴趣的同学可以尝试
-
screen 多视窗管理器,用于较老的非图形界面以及远程登录,可在一个终端中执行多任务
Shell切换
直接输入shell名称即可切换(shells文件中的末尾文件名)
若要退出Shell,使用exit(如果是最后一个shell则会退出终端)
Hello world (bash)
echo命令
首先介绍echo
命令,用于输出字符串到控制台
echo [options] [string]
options | description |
---|---|
-n | 输出完成不换行 |
-E | 不激活转义字符(反斜线) |
转义字符默认激活(-e选项),当转义字符被激活后,将能使用如下转义字符
转义字符 | 描述 |
---|---|
\\ | 只是反斜杠 |
\a | 发出警告声 |
\b | 退格键 |
\c | 关闭输出,以后不再输出内容 |
\e | ESC键 |
\f | 分页符 |
\n | (同C)换行符 |
\r | 回车 |
\t | (水平)制表符tab |
\v | 垂直制表符(转到下一行的当前列) |
\0nnn | 以八进制ASCII表输出字符,nnn为三位八进制序号 |
\xhh | 以十六进制ASCII表输出字符‘ |
转义字符详解/样例
-
\b退格键,使用后相当于按下退格键
zheng@Kali:~$ echo -e "abc" abc zheng@Kali:~$ echo -e "ab\bc" ac
-
\r与\n,**换行与回车有什么区别?**这在Windows与Linux的差异中是一个常见问题
使用cat -A命令可以找到区别
cat -A <Filename> #显示文件中的所有字符(包括隐藏字符) #Windows中的文件 zheng@Kali:~/Desktop$ cat -A Hello.txt Hello World!^M$ I am Zheng.^M$ #Linux中的文件 zheng@Kali:~/Desktop$ cat -A Hello.txt Hello World!$ I am Zheng.$
比较后不难发现,Windows的文件行末相对于Linux多了^M
其实^M表示的就是\r回车,$表示的是\n换行,Linux文件的行尾是\n,而Windows文件的则是\r\n
我们可以用一个很方便的命令实现两种文件格式的转换而不需要手动更改
cmd2unix <filename> #将Windows中的文件格式换成Linux中的 unix2cmd <filename> #将Linux中的文件格式换成Windows中的
两个命令还有许多参数可以使用,这里不再展开,有兴趣的同学可以自己研究
echo命令的颜色输出
echo -e "\e[1;31m Hello World \e[0m"
#打印出红色的"Hello World"
其中\e[1;
\e[0m
表示颜色开始、结束,颜色代码31m
表示红色,可以更换
代码 | 颜色 |
---|---|
30m | 黑 |
31m | 红 |
32m | 绿 |
33m | 黄 |
34m | 蓝 |
35m | 洋红 |
36m | 青色 |
37m | 白色 |
Shell 文件格式
-
文件第一行必须指定编译器(以bash为例),只以#开头的为注释行
#!/bin/bash #Author: Zheng Huang #This is the first linux shell I written #Date: 6, Aug, 2020
-
正文中的单条命令与命令行中一致
echo -e "Hello World!\n" #输出第一行并回车 echo -e "I am Zheng.\n" #第二行
编译执行
-
两部分代码直接相接,保存在文件中(以test.sh为例),后缀一般为.sh(Linux不要求后缀名,但为了便于维护,制订了统一标准)
-
直接输入shell的绝对路径\相对路径就能运行(要求改为可执行文件)注意不能直接输入文件名,即使shell在当前工作目录下
chmod 750 test.sh #更改test.sh为可执行文件
-
也可以使用bash命令编译运行(这个方法不要求Shell为可执行文件)
bash .\test.sh
至此,我们的第一个Shell脚本Hello World已经完成啦
总结
本节作为Linux Bash Shell编程的第一章,主要介绍了Shell的作用以及分类,并在制作第一个Bash脚本程序的同时学习了echo语句的基本使用。下一节将介绍Bash的基本功能