Shell基础知识

1、简介

Shell 是一个用 C 语言编写的程序。Shell 既是一种命令语言,又是一种程序设计语言。

Shell 是一个命令解释器。位于操作系统和应用程序(人)之间,是一个接口,Shell 负责把应用程序的输入命令信息解释给操作系统,将操作系统指令处理后的结果解释给应用程序。shell就是在操作系统和应用程序之间的一个命令翻译工具。

Shell 是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服务。

Shell 脚本(shell script),是一种为 shell 编写的脚本程序,Shell 和 Shell 脚本是两个不同的概念

Shell环境

  • Bourne Shell(/usr/bin/sh或/bin/sh)
  • Bourne Again Shell(/bin/bash)
  • C Shell(/usr/bin/csh)
  • K Shell(/usr/bin/ksh)
  • Shell for Root(/sbin/sh)

在一般情况下,人们并不区分 Bourne Shell 和 Bourne Again Shell,所以,像 #!/bin/sh,它同样也可以改为 #!/bin/bash。

#! 告诉系统其后路径所指定的程序即是解释此脚本文件的 Shell 程序。

分类

  1. 图形界面shell:桌面
  2. 命令行式shell:windows系统:cmd.exe 命令提示字符 linux系统:sh / csh / ksh / bash / …

我们常说的shell是命令行式的shell,在工作中常用的是linux系统下的bash

shell命令说明
echo $SHELL查看当前系统的shell类型
cat /etc/shells查看当前系统环境支持的shell
chsh <用户名> -s <新shell>更改默认的shell

使用方式

方式作用特点
手工方式手工敲击键盘,在shell的命令行输入命令,按Enter后,执行通过键盘输入的命令,然后shell返回并显示命令执行的结果.逐行输入命令、逐行进行确认执行
脚本方式就是说我们把手工执行的命令a,写到一个脚本文件b中,然后通过执行脚本b,达到执行命令a的效果. 当可执行的Linux命令或语句不在命令行状态下执行,而是通过一个文件执行时,我们称文件为shell脚本。执行文件达到批量执行命令的效果

运行Shell脚本的方法

(1)source方式 | ./ (作为可执行程序)

source方式可以使环境变量生效

chmod +x ./test.sh  #使脚本具有执行权限
./test.sh  #执行脚本

说明:linux的默认搜索目录里没有当前目录,不写./linux系统会去 PATCH 里寻找有没有 test.sh,用./告诉系统就在当前目录找

(2)作为解释器参数(推荐使用)

这种运行方式是,直接运行解释器,其参数就是 shell 脚本的文件名,如:

/bin/bash test.sh
/bin/php test.php

(3)脚本首行指定解释器

开发规范

1、脚本命名要有意义,文件后缀是.sh
2、脚本文件首行**是而且必须是**脚本解释器
    #!/bin/bash
3、脚本文件解释器后面要有脚本的基本信息等内容
    脚本文件中尽量不用中文注释;
    尽量用英文注释,防止本机或切换系统环境后中文乱码的困扰
    常见的注释信息:脚本名称、脚本功能描述、脚本版本、脚本作者、联系方式等
4、脚本文件常见执行方式:bash 脚本名
5、脚本内容执行:从上到下,依次执行
6、代码书写优秀习惯;
    1)成对内容的一次性写出来,**防止遗漏**。
        如:()、{}、[]、''、``、""
    2)[]中括号两端要有空格,书写时即可留出空格[    ],然后再退格书写内容。
    3)流程控制语句一次性书写完,再添加内容
7、通过缩进让代码易读;(即该有空格的地方就要有空格)

二、变量

shell 脚本的变量都是字符类型

分类

分类作用
本地变量变量名仅仅在当前终端有效
全局变量变量名在当前操作系统的所有终端都有效
shell内置变量shell解析器内部的一些功能参数变量

1、本地变量

本地变量就是:在当前系统的某个环境下才能生效的变量,作用范围小。

本地变量包含两种:

  • 普通变量
  • 命令变量

表现样式

普通变量定义

类型样式特点
无引号变量名=变量名变量值必须是一个整体,中间没有特殊字符,"="前后没有空格
单引号变量名=‘变量值’原字符输出
双引号变量名=“变量值”变量值先解析,后整合输出

习惯:数字不加引号,其他默认加双引号;

命令变量定义

类型样式特点
反引号变量名=命令反引号
小括号变量名=$(命令)$()

执行流程:

  1. 执行 xx或者$() 范围内的命令
  2. 将命令执行后的结果,赋值给新的变量名

2、环境变量(全局变量)

在当前系统的所有环境下都能生效的变量,可以基于env命令查看

表现样式

export 变量=值

3、内置变量

符号意义
$0获取当前脚本文件名
$n获取脚本的第n个参数值
$#获取脚本参数的总个数
$?获取上一个指令的状态返回值(0为成功,非0为失败)

变量操作

查看
$变量名、"$变量名"、${变量名}、"${变量名}"


取消
unset 变量名

4、变量计算

shell 脚本的变量都是字符类型,但也支持简单的整数运算

# 1、let
let n3=n1+n2

# 2、$(())语法
n3=$((n1+n2))

三、表达式

1、条件表达式

条件的结果无非就是成立或者不成立,而我们之前所学的$?就可以表示,判断条件是否成立的过程我们称为条件判断,一般有两种表现形式:

  • test 条件表达式
  • [ 条件表达式 ]

格式注意:

  • 后者需要注意方括号[ ]与条件表达式之间至少有一个空格。
  • 条件成立,状态返回值是0;条件不成立,状态返回值是1

2、逻辑表达式

符号样式作用
&&命令1 && 命令2只有1成功,2才执行
ll命令1 ll 命令21和2只能执行一个

3、文件表达式

符号样式作用
-f-f file_name判断普通文件
-d-d file_name判断目录
-s-s file_name判断链接文件
-r-x file_name判断读
-w-w file_name判断写
-x-x file_name判断执行

4、一般表达式

数字样式特点
eq、ne数字1 eq 数字2相等eq,不等ne
gt、lt数字1 gt 数字2gt大于,小于lt
字符串样式特点
==、!=str1 == str2字符串内容是否一致
-z、-n-z str1z空,n不空

注意:在字符串表达式中,"==" 可以简写为 “=”, 但是不推荐。

四、常见符号

1、重定向符号

符号说明作用
>重定向表示将符号左侧的内容,以覆盖的方式输入到右侧文件
<重定向表示将符号左侧的内容,以覆盖的方式输入到左侧文件
l管道符常用于将两个命令隔开,然后命令间(从左向右)传递信息使用的
&后台展示就是将一个命令从前台转到后台执行
1
2
2>&1
信息获取1:表示正确输出的信息
2:表示错误输出的信息
2>&1:代表所有输出的信息,也可以简写为 &>

脚本实例

#!/bin/bash
echo '下一条错误命令'
dsfsafsafdsa

执行效果

bash ceshi.sh
bash ceshi.sh 1>> ceshi-ok 2>> ceshi-err
cat ceshi-ok ceshi-err
bash ceshi.sh >> ceshi-all 2>&1
cat ceshi-all



posted on 2020-10-10 16:57  yycnblog  阅读(118)  评论(0)    收藏  举报

导航