shell脚本基础

目录

前言

一、概述

(一)、shell脚本基础概念

(二)、shell的类型

二、Shell变量

(一)、组成

1.变量名

2.变量值

(二)、类型

1.系统内置变量(环境变量)

2.自定义变量

3.预定义变量

 4.位置变量

5.作用域      

​6.shell中的字符串      

三、运算符

(一)、数学运算

(二)、比较运算     

1.逻辑运算符

2.条件测试

3.字符串比较

4.数值比较

5.文件比较

四、shell脚本

(一)、shell脚本编写规范        

(二)、shell运行规则

(三)、shell脚本运行追踪

总结



前言

shell是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁。Shell 既是一种命令语言,又是一种程序设计语言。

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

Shell属于内置的脚本,程序开发的效率非常高,依赖于功能强大的命令可以迅速地完成开发任务(批处理)语法简单,代码写起来比较轻松,简单易学。

一、概述

(一)、shell脚本基础概念

脚本就是将手动一次性执行的命令进行规范且自动化

(二)、shell的类型

shell         命令解释环境

类型有
    sh
    ash
    bsh
    csh
    bash
    tcsh
    dsh
    zsh

在Linux系统中

文件名.sh             .sh是linux下bash shell 的默认后缀

查看系统中支持的shell
    cat /etc/shells

查看系统默认shell
    echo $SHELL

shell脚本基础_第1张图片

二、Shell变量

(一)、组成

1.变量名

不会变化

声明规范
    不能是数字或数字开头
    以_或字母开头
    变量名中不能包含特殊字符

shell脚本基础_第2张图片

声明方法
    驼峰式                userName
        
    双驼峰                UserName
        
    shell写法
        user_name
        username
        USERNAME

2.变量值

        不断变化

        数字、字符

(二)、类型

1.系统内置变量(环境变量)

这种变量中主要保存的是和系统操作环境相关的数据,一般对系统起作用的环境变量的变量名是系统预先设定好的。

env可在/etc/profile文件中修改
   

查看环境变量

echo $PATH

显示当前环境变量的值

echo $LANG

 表示系统的默认语言环境为美式英语(English, United States)并使用UTF-8编码

查看当前的区域设置

locale

shell脚本基础_第3张图片

shell脚本基础_第4张图片

查看远程连接

echo  $SSH_CONNECTION

shell脚本基础_第5张图片

2.自定义变量

这种变量是最常见的变量,由用户自由定义变量名和变量的值。

varName=varValue

等号两边不能有空格

字符串
    shell中可以不使用引号
    当包含有空格时,需要使用引号

引号的用法

不会引用变量值 单引号        '
会应用变量值 双引号        "
引用命令结果 反撇号        `
$(命令) 应用场景较多

3.预定义变量

是Bash中已经定义好的变量,变量名不能自定义,变量作用也是固定的。

$0 脚本本身的名称
$# 脚本后参数的个数
$* 脚本运行时参数的内容(整体输出)
$@ 脚本运行时参数的内容(逐个输出)
$? 脚本运行完毕后的返回值
默认情况大 0          成功
非0      失败

  shell脚本基础_第6张图片shell脚本基础_第7张图片

shell脚本基础_第8张图片

shell脚本基础_第9张图片

 一般情况下失败为1,特殊的失败
shell脚本基础_第10张图片


 4.位置变量

这种变量主要是用来向脚本当中传递参数或数据的,变量名不能自定义,变量作用是固定的。

    脚本后参数所在的位置
    $1
    ...
    $9       
    
 

5.作用域      

输出        echo $varName

默认变量只在当前shell下生效

若要在当前及其子shell下生效,需要声明为全局变量(export

shell脚本基础_第11张图片
  
shell脚本基础_第12张图片        
  
  6.shell中的字符串      

string
 1)获得字符串的长度         

语法:    ${#StringName}

shell脚本基础_第13张图片

2)字符串取子串        
语法:    ${#StringName:position:lenght}      

注意:lenght没有定义时,一直取到字符串的结尾!  

shell脚本基础_第14张图片

3)字符串的截取          
a.从左至右截取最后一个匹配字符串string之后的所有字符串                
语法:    ${StringName##*string}    

b.从左至右截取第一个匹配字符串string之后的所有字符串
语法:    ${StringName#*string}

c.从右至左截取最后一个匹配字符串string之后的所有字符串
语法:    ${StringName%%string*}    

d.从右至左截取第一个匹配字符串string之后的所有字符串
语法: ${StringName%string*}

shell脚本基础_第15张图片

4)字符串的拼接
语法:    StringName3=${StingName1}${StringName2}

shell脚本基础_第16张图片

5)字符串替换:
语法:    ${StringName/OldString/NewString}

shell脚本基础_第17张图片

三、运算符

(一)、数学运算

+ - * / %    * 作为乘号时需要加转义符为\*
运算方法
 expr expr $a + $b
$((a+b)) echo $((a+b))
$[a+b] echo $[a+b] 
注意 shell不支持浮点数的显示

\r 回车符
\d 垂直制表符
\v 水平制表符

  shell脚本基础_第18张图片

shell脚本基础_第19张图片

(二)、比较运算     

1.数值比较

-eq 等于
-ne    不等于
-lt 小于
-le 小于等于
-gt 大于
-ge 大于等于

用test测试

shell脚本基础_第20张图片

2.文件比较

-e 文件或目录是否存在
-f 是否为文件
-d 是否为目录
-r 判断文件是否可读
-w 判断文件是否可写
-x 判断文件是否可执行

shell脚本基础_第21张图片

 shell脚本基础_第22张图片

3.字符串比较

= 字符串一致
!= 字符串不一致
-z 字符串为空
!     -z 字符串不为空

shell脚本基础_第23张图片

4.逻辑运算符

&& 并且,有假则假,全真为真
|| 或者,有真则真,全假为假
! 取反 有真则假,有假则真

shell脚本基础_第24张图片

shell脚本基础_第25张图片  shell脚本基础_第26张图片

5.条件测试

&& [ $a -ne $b ] &&  echo OK 条件 && 输出结果
条件为真输出
|| [ $a -ne $b ] ||  echo OK 条件 || 输出结果
条件为假输出

四、shell脚本

(一)、shell脚本编写规范
        

第一行 #!/bin/bash
第二行 #脚本的说明
第三行  脚本正文

(二)、shell运行规则

没有x权限 bash  脚本所在路径/脚本文件
source 脚本所在路径/脚本文件
.(点)脚本所在路径/脚本文件
有x权限 .(点)/脚本文件
脚本绝对路径/脚本文件

shell脚本基础_第27张图片

shell脚本基础_第28张图片

shell脚本基础_第29张图片不打断会一直查看 

(三)、shell脚本运行追踪

shell脚本运行追踪bash -x 脚本所在路径/脚本文件
    
$[$RANDOM%100]返回100内随机数
    
seq 1 10返回1到10 的连续数字
    
{1..10}返回1到10 的连续数字
    
seq 1.1 10.1返回1.1 2.1 3.1.... 10.1

shell脚本基础_第30张图片
    shell脚本基础_第31张图片
read -p "提示语" 变量名读取键盘输入并赋值给变量名
 shell脚本基础_第32张图片


shell脚本基础_第33张图片

shell脚本基础_第34张图片

总结

今天的任务量有些重,但知识点是看懂和编辑Shell脚本的基础,需要花费时间进行反复背记,加油吧!

你可能感兴趣的:(linux,运维,服务器)