Shell入门笔记

Shell脚本:Linux Shell脚本学习指南
菜鸟教程 - Shell教程
Linux入门 - Shell脚本是什么
Linux chmod命令

github同步 - Shell入门

一、Shell是什么

Shell 是一个应用程序,它连接了用户和 Linux 内核,让用户能够更加高效、安全、低成本地使用 Linux 内核,这就是 Shell 的本质。


shell其实是一个命令解释器,由于安全、复杂、繁琐等原因,用户不能直接接触内核(也没有必要),需要另外再开发一个程序,让用户直接使用这个程序;该程序的作用就是接收用户的操作(点击图标、输入命令),并进行简单的处理,然后再传递给内核,这样用户就能间接地使用操作系统内核了。你看,在用户和内核之间增加一层“代理”,既能简化用户的操作,又能保障内核的安全,何乐不为呢?在Linux下,这个命令行程序叫做 Shell

​ Shell 本身并不是内核的一部分,它只是站在内核的基础上编写的一个应用程序,它和 QQ、迅雷、Firefox 等其它软件没有什么区别。然而 Shell 也有着它的特殊性,就是开机立马启动,并呈现在用户面前;用户通过 Shell 来使用 Linux,不启动 Shell 的话,用户就没办法使用 Linux。

  • 交互的方式:从键盘输入命令,通过/bin/bash的解析,可以立即得到Shell的回应
[root@clsn ~]# ls            
anaconda-ks.cfg  
  • 非交互的方式:如果我们的命令或者应用程序不在命令行直接执行,而是通过一个程序文件来执行时,这个程序就被称之为shell脚本,通过文件执行脚本的方式称之为非交互方式
[root@clsn ~]# ./firstShell.sh

拓展:命令行提示符

[mozhiyan@localhost ~]$

- []是提示符的分隔符号,没有特殊含义。
- mozhiyan表示当前登录的用户,我现在使用的是 mozhiyan 用户登录。
- @是分隔符号,没有特殊含义。
- localhost表示当前系统的简写主机名(完整主机名是 localhost.localdomain)。
- ~代表用户当前所在的目录为主目录(home 目录)。如果用户当前位于主目录下的 bin 目录中,那么这里显示的就是- bin。
- $是命令提示符。Linux 用这个符号标识登录的用户权限等级:如果是超级用户(root 用户),提示符就是#;如果是普通用户,提示符就是$。

二、Shell 是一种脚本语言

任何代码最终都要被“翻译”成二进制的形式才能在计算机中执行。

有的编程语言,如 C/C++、Pascal、Go语言、汇编等,必须在程序运行之前将所有代码都翻译成二进制形式,也就是生成可执行文件,用户拿到的是最终生成的可执行文件,看不到源码。

这个过程叫做<u>编译(Compile)</u>,这样的编程语言叫做<u>编译型语言</u>,完成编译过程的软件叫做<u>编译器(Compiler)</u>。

而有的编程语言,如 Shell、JavaScript、Python、PHP等,需要一边执行一边翻译,不会生成任何可执行文件,用户必须拿到源码才能运行程序。程序运行后会即时翻译,翻译完一部分执行一部分,不用等到所有代码都翻译完。

这个过程叫做<u>解释</u>,这样的编程语言叫做<u>解释型语言或者脚本语言(Script)</u>,完成解释过程的软件叫做<u>解释器</u>

编译型语言的优点是执行速度快、对硬件要求低、保密性好,适合开发操作系统、大型应用程序、数据库等。

脚本语言的优点是使用灵活、部署容易、跨平台性好,非常适合 Web 开发以及小工具的制作。

Shell 就是一种脚本语言,我们编写完源码后不用编译,直接运行源码即可。

三、Shell的分类

Shell脚本是什么 - Shell的分类

Shell种类全称 缩写 概要
Bourne Shell sh sh 是 UNIX 上的标准 shell,很多 UNIX 版本都配有 sh。sh 是第一个流行的 Shell。由 AT&T 公司的 Steve Bourne开发,为了纪念他,就用他的名字命名了。
Boume Again Bash Bash 由 GNU 组织开发,保持了对 sh shell 的兼容性,是各种 Linux 发行版 默认配置的 shell
C Shell csh C Shell 是广为流行的 Shell 变种。C Shell 主要在 BSD 版的 UNIX 系统中使用,发明者是柏克莱大学的 Bill Joy。C Shell 因为其语法和 C 语言类似而得名,这也使得 UNIX 的系统工程师在学习 C Shell 时感到相当方便。
TC Shell tcsh tcsh 是 csh 的增强版,加入了命令补全功能,提供了更加强大的语法支持。
Z Shell zsh Zsh属于Shell中的一种,但比Bash好用,而且完全兼容Bash,拥有及其丰富的插件。
➜  ~ bash -version
GNU bash, version 3.2.57(1)-release (x86_64-apple-darwin18)
Copyright (C) 2007 Free Software Foundation, Inc.

四、查看系统中的shell

4.1、查看系统中的shell

➜  ~ cat /etc/shells 
/bin/bash
/bin/csh
/bin/ksh
/bin/sh
/bin/tcsh
/bin/zsh

4.2、查看默认shell

➜  ~ echo $SHELL
/bin/zsh

4.3、修改系统默认shell

当前默认为zsh,改为bash

➜  ~ chsh -s /bin/bash
Changing shell for qiyeyun.
Password for qiyeyun: 

输入密码,重启Terminal,完成。

4.4、切换shell

// 默认shell
➜  ~ echo $SHELL
/bin/zsh

// 切换bash
➜  ~ bash
bash-3.2$ 

// 返回默认shell
➜  ~ bash
bash-3.2$ exit
exit
➜  ~ 

4.5、查看zsh/bash版本

➜  ~ zsh --version
zsh 5.3 (x86_64-apple-darwin18.0)
➜  ~ bash -version
GNU bash, version 3.2.57(1)-release (x86_64-apple-darwin18)
Copyright (C) 2007 Free Software Foundation, Inc.

五、Hello World

5.1、编写hello world脚本

➜  ~ vim helloworld.sh

// 在文本写入
#!/bin/bash
echo "Hello World!!!"

// :wq 保存

5.2、执行报错,添加权限

1.执行报错

➜  ~ ./helloworld.sh
permission denied: ./helloworld.sh         // 错误提示,没有权限执行

2.添加权限 - Linux chmod命令

➜  ~ chmod abc file

其中a,b,c各为一个数字,分别表示<u>User、Group、及Other</u>的权限。

r=4,w=2,x=1

  • 若要rwx属性则4+2+1=7;
  • 若要rw-属性则4+2=6;
  • 若要r-x属性则4+1=5。

3.再次执行脚本

➜  ~ chmod 777 helloworld.sh 
➜  ~ ./helloworld.sh 
Hello World!!!

5.3、执行脚本的几种方式

1. 直接使用 Bash 去解释脚本中的内容

➜  ~ bash helloworld.sh 
Hello World!!!

2. 绝对路径/相对路径执行

➜  ~ /Users/github/Shell学习/helloworld.sh 
Hello World!!!
➜  ~ ./helloworld.sh 
Hello World!!!

3. source命令 等同于 .

➜  ~ source helloworld.sh 
Hello World!!!
➜  ~ . helloworld.sh 
Hello World!!!

4. 将脚本加入系统命令

macOS/Linux 环境变量设置

Shell 脚本是否可以像 Linux 系统命令一样,不用指定路径,直接运行呢?当然是可以的,不过需要进行环境变量的配置。

====== 测试在bash环境下,而不是zsh下 ======
1、打开环境变量文件
$ open ./.bash_profile

2、在.bash_profile文件中加入shell脚本的路径, 注意:是目录,不需要文件
# add by linxiang 2019.08.07 for shell script
export PATH=/Users/qiyeyun/Downloads:$PATH

3、执行命令立即加载生效
$ source ./.bash_profile

4、查看PATH
$ echo $PATH
/Users/qiyeyun/Downloads:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Applications/Wireshark.app/Contents/MacOS:/Users/qiyeyun/.rvm/bin

5、脚本能在任意目录下用啦
$ helloworld.sh 
Hello World!!!

5. 拓展:(source与.命令)

source命令(从 C Shell 而来)是bash shell的内置命令。

. 命令 就是个点符号(从Bourne Shell而来)是source的另一名称。

六、执行方式 bash、 "." 、"./" 、source比较

新建一个 test.sh

#!/bin/bash

# PPID父进程 ,当前进程为$$
echo PID is $$
echo Parent PID is $PPID

开启全部权限

$ chmod 777 test.sh

6.1、是否创建子shell

分别用不同方式执行

$ echo $$
2163
$ bash test.sh 
PID is 2253
Parent PID is 2163
$ ./test.sh 
PID is 2254
Parent PID is 2163
$ /Users/qiyeyun/github/iOS-/Shell学习/test.sh
PID is 2258
Parent PID is 2163
$ source test.sh 
PID is 2163
Parent PID is 2162
$ . test.sh 
PID is 2163
Parent PID is 2162

结论:

  1. bash和"./"命令都是打开一个子shell来读取并执行FileName中命令;
  2. source是与"."类似,是在当前工作环境中执行,配置文件就是影响当前的工作环境,这种情况下用source;

6.2、关闭执行权限

将执行权限全部关闭

$ chmod 666 test.sh

再一次执行

$ bash test.sh 
PID is 2234
Parent PID is 2163
$ ./test.sh
-bash: ./test.sh: Permission denied
$ /Users/qiyeyun/github/iOS-/Shell学习/test.sh 
-bash: /Users/qiyeyun/github/iOS-/Shell学习/test.sh: Permission denied
$ source test.sh 
PID is 2163
Parent PID is 2162
$ . test.sh 
PID is 2163
Parent PID is 2162

结论:

  1. "./"(相对/绝对路径)执行需要执行权限;

6.3、表格

执行方式 无执行权限是否可执行 是否打开子shell
bash 可执行 打开子shell
./(相对/绝对路径) 无法执行 打开子shell
source / . 可执行 当前shell环境
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,029评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,395评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,570评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,535评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,650评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,850评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,006评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,747评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,207评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,536评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,683评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,342评论 4 330
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,964评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,772评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,004评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,401评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,566评论 2 349