学习Shell编程

时间:2023-12-23 17:13:49

目录

1 什么是Shell

2 Linux的启动过程

3 怎样编写一个Shell脚本

4 Shell脚本的执行方式

5 内建命令和外部命令的区别

6 管道和重定向

7 变量赋值

8 环境变量配置文件

1 什么是Shell

Shell是命令解释器,用于解释用户对操作系统的操作

2 Linux的启动过程

BIOS-MBR-BootLoader(grub)-kernel-systemd-系统初始化-Shell

3 怎样编写一个Shell脚本

  • UNIX的哲学:一条命令只做一件事

  • 为了组合命令和多次执行,使用脚本文件来保存需要执行的命令

  • 赋予该文件执行权限(chmod u+rx filename)

文件名:2.sh

#!/bin/bash # demo 2 cd /tmp pwd

学习Shell编程

执行2.sh,输出/tmp的路径

4 Shell脚本的执行方式

执行命令共四种

(1) bash ./filename.sh
(2)./filename.sh
学习Shell编程
学习Shell编程
这两种方式,Shell脚本产生一个新的bash子进程,脚本执行过程中,是子进程切换到新的目录,当子进程执行完毕后,回到父进程,当前目录不会发生变化。
执行命令
(3)source ./filename.sh
(4). filename.sh
学习Shell编程
学习Shell编程

这两种方式,Shell脚本不会产生新的子进程,脚本执行过程中,直接在父进程中进行操作。所以当前目录发生变化。

5 内建命令和外部命令的区别

内建命令不需要创建子进程

内建命令对当前Shell生效

6 管道和重定向

管道与管道符

  • 管道和信号一样,也是进程通信的方式之一

  • 匿名管道(管道符)是Shell编程经常用到的通信工具

  • 管道符是“|”,将前一个命令执行的结果传递给后面的命令

ps | cat echo 123 | ps

学习Shell编程
学习Shell编程
重定向符号
一个进程默认会打开标准输入、标准输出、错误输出三个文件描述符
输入重定向符号“<”
read var < /path/to/a/file
学习Shell编程

从/etc/passwd文件中读取有多少行,输出显示有33行

学习Shell编程

通过var2变量读取a.txt中的数据,输出var2即显示a.txt中的数据

输出重定向符号“>”“>>”“2>”“&>”
echo $var_2 > a.txt
把变量var_2的值输出到a.txt,会覆盖a.txt原有内容。
学习Shell编程
echo $var_3 >> a.txt
把变量var_3的值追加到a.txt,不会覆盖a.txt原有内容。
学习Shell编程
如果希望把错误信息保存到文件,可以使用“2>”“&>”
nocmd 2> b.txt
把错误信息保存到b.txt中,查看b.txt文件,即显示错误信息。
学习Shell编程
nocmd &> c.txt
把所有的输出结果(正确和错误)都保存下来。
学习Shell编程
输入和输出重定向组合使用

在3.sh中新建/home/zopen/test/a.sh,并把echo "hello bash."写入a.sh中

学习Shell编程

7 变量赋值

变量的定义

变量名的命名规则
(1)字母、数字、下划线
(2)不以数字开头
变量的赋值
为变量赋值的过程,称为变量替换
变量名=变量值,比如:a=123
使用let为变量赋值,比如:let a=10+20
将命令赋值给变量,比如:l=ls
将命令结果赋值给变量,使用$()或者'',比如:letc=$(ls -l /etc)
变量值有空格等特殊字符可以包含在""或''中
变量的引用
  • ${变量名}称作对变量的引用

  • echo ${变量名}查看变量的值

  • ${变量名}在部分情况下可以省略为 $变量名

学习Shell编程
变量的作用范围
  • 变量的默认作用范围

  • 变量的导出 export

  • 变量的删除 unset

学习Shell编程

新启动一个bash,echo $a,输出为空,退出bash,echo $a,输出1

export可以把变量从子Shell传递给父Shell

如果想删除变量,则使用:unset 变量名

8 环境变量配置文件

配置文件

  • /etc/profile

  • /etc/profile.d/

  • ~/.bash_profile

  • ~/.bashrc

  • /etc/bashrc

带etc的是系统层次,所有用户共同使用的环境变量。

非etc的是特定用户使用的环境变量。