引入
完成以下任务
:
判断用户家目录下(
~
)下面有没有一个叫
test
的文件夹
如果没有,提示按
y
创建并进入此文件夹,按
n
退出
如果有,直接进入,提示请输入一个字符串,并按此字符串创建一个文件,如果此
文件已存在,提示重新输入,重复三次自动退出,不存在创建完毕,退出
简单的进行命令堆积无法完成以上任务,这就需要学习相应的
shell
脚本语法规则了
简介
Shell
的概念
是一种应用程序
,
也是一种设计语言
作为应用程序
系统分为
,
硬件层
,Liunx
系统层
,Shell,
应用程序层
,
如图
1
此时
Shell
的作用是沟通应用程序层与
Liunx
系统层
,
即
Shell
解析器
Shell
解析器常用的有三种
,
分别是
sh,ash,bash,
一般情况下使用
bash
可以使用
echo $SHELL
查看使用的那种解析器
,
如图
2
作为设计语言
概念
:shell
脚本语言
,
不需要编译
,
直接解析执行
(
批处理
)
优点
:
简化我们对系统的管理与应用程序的部署过程
名词
:
批处理
:
大量的循环的数据处理
,
如扫描当前根目录下是否存在
a.txt,
此时需要在
当前根目录所有文件夹中一一寻找
脚本语言
:
我们只需使用任意文本编辑器,按照语法编写相应程序
,
增加可执行权
限
,
即可在安装
shell
命令解释器的环境下执行的代码语言
,
如
python,html,css
等
Shell
脚本的分类
系统调用
这类脚本无需用户调用,系统会在合适的时候调用,如:
/etc/profile
、
~/.bashrc
等
/etc/profile:
此文件为系统的每个用户设置环境信息
,
当用户第一次登录时
,
该文件被执行
,
系统的公共环境变量在这里设置
开机自启动的程序,一般也在这里设置
注意
:
如果在该文件中配置
,
需要从新登录用户才可生效
~/.bashrc
用户自己的家目录中的
.bashrc
登录时会自动调用,打开任意终端时也会自动调用
这个文件一般设置与个人用户有关的环境变量,如交叉编译器的路径等等
/etc/profile
与
~/.bashrc
的关系
,
如下图
用户编写
需要手动调用
注意
:
无论是系统调用的还是需要我们自己调用的,其语法规则都一样
第一个Shell脚本
1,
创建
Hello.sh
文件
2,
编写以下代码
#!/bin/bash
echo "Hello Shall"
3,
执行
hello.sh
文件
./Hello.sh
说明:
#!
用来声明脚本由什么
shell
解释,否则使用默认
shell
#
表示注释本行
注意:
创建文件时
:
如果是在
windows
中创建编写的
Shell
脚本文件
,
拖拽到
Liunx
下无法运行
,
因为
Windows
与
Liunx
下
\
表示的含义不同
,
所以导致程序无法被识别
解决方案
1:
在
Liunx
中使用
vim
编辑器
,
在最后一行模式输入
set ff=unix
解决方案
2:
在
Linux
中安装
dos2unix,
使用
dos2unix
转换
步骤
:
1,
命令行输入
:sudo apt-age install dos2unix
2,
命令行输入
:dos2unix
文件地址
编写代码
:
#
注释
#!
用来声明脚本由什么
shell
解释,否则使用默认
shell
echo
输出
执行脚本方式
:
方式
1:
使用
sh
或
bash
sh
文件路径
bash
文件路径
方式
2:./
文件路径
需要可执行权限
,
添加权限命令
:chmod +x
文件路径
+
增加权限
-
减少权限
x:
可执行
以上方式会开启子
Shell
如
:
chmod +x hishell.sh
方式
3:source
文件名或
.
文件名
source
文件路径 借鉴
cshell
.
文件路径 借鉴
bash
以上方式不会开启子
Shell
开启子
Shell
与不开启的区别
开启子
Shell
后
,
子
Shell
中的变量父
Shell
不可见
区别
:
./
和
bash
执行过程基本一致,
bash
明确指定
bash
解释器去执行脚本,脚本中