2021-05-08

今日笔记:

shell编程(脚本):

(1)shell 编程
编程:分为编译型和解释型
C语言-----编译型
脚本语言-----解释型(由解释器来帮助完成用户和内核的交互)

(2)命令,shell,shell编程 
命令:用户和内核进行交互的指令(经过一个shell来进行解释)
shell:命令行解释器,相当于用户和内核之间交互的桥梁
shell编程(脚本):shell命令的有序集合

(3)shell 的分类
可以分为4类:
第一类:sh (bournel shell)--->首发的版本,但是不支持Tab键,上下键翻阅历史命令,通配符 
第二类:csh  ----->编程风格类似于C语言,但是不够健壮
第三类:ksh  ------>收费版本,需要许可证
第四类:bash(bournel again shell )--->是sh 的增强版,支持Tab键,上下键翻阅历史命令,通配符

(4)shell编程的书写格式
首先:首行顶格书写:#!/bin/bash  ---->交代了解释器所在的位置
其次:按照语法格式进行书写即可

(5)shell编程的书写步骤
第一步:先新建并打开一个后缀名为.sh的文件  ----->vim test.sh 
第二步:修改该文件的权限为可执行   ----->chmod +x test.sh 
第三步:直接运行该可执行文件即可  ------> ./test.sh 

注:要想直接运行test.sh可以将包含该可执行文件的路径的添加到环境变量中去,添加的方式:
方式1:临时修该---》即:在当前终端上输入以下命令:export PATH=~/linuxC/day3:$PATH 
       注意:此种改法只能在当前终端有效
方式2:永久修改---》即:在配置文件:家目录下的隐藏文件----》vim .bashrc / vim ~/.bashrc
                  在其末尾添加一行命令:export PATH=~/linuxC/day3:$PATH

(6)shell的基本语法
注意:在shell脚本中,没有数据类型的区分,将所有的值都视为一个字符串来处理
变量的分类:
第一类:用户自定义变量
1,如何定义一个变量?
格式: 变量名(一般建议大写)
2,如何给该变量进行赋值?
格式: 变量名=值
3,如何访问该变量的值?
格式: $变量名 / ${变量名} 

注意:当$变量名后面紧挨着由字符时,应该注意添加{}来进行分隔,否则会被当成一整个变量名来处理。
eg: 
NAME=2
echo This is the $NAMEnd  ---->结果为:This is the     error!
echo This is the ${NAME}nd  --->结果为:This is the 2nd   OK!

第二类:位置参数(命令行参数)
理解:和数组类似
意味着该位置参数的下标都是从0开始
但是:下标为0代表当前该可执行文件的名字,从1开始才是每一个有效的参数

引用:
    格式:$N  (N就是一个常数)
    注意:当N >= 10时,应该用{}括起来
          eg:
             echo  ${10}
第三类:系统预定义变量
概念:由系统预先定义好的一些变量,该变量已经被赋予了固定的含义,该变量一般由$和另外一个字母来组成
比如:
$#:代表命令行参数的个数(不包含文件名在内)
$@:代表命令行参数  (不包含文件名在内)
$*:代表命令行参数  (不包含文件名在内)
$?:代表上一条命令的退出状态(正常退出:0,异常退出:1)

第四类:环境变量

查看环境变量----》通过env 命令可以查看所有的环境变量
新增一个环境变量----》export  环境变量名=值
清除一个环境变量----》unset 环境变量名

(7)shell程序和语句
shell程序:由0条或者多条shell命令组成
shell语句:按照规定的shell语法进行书写的文本流、

shell语句的分类:
第一类:说明性语句
第二类:功能性语句
第三类:结构性语句


第一类:说明性语句:以#开头的语句都是说明性语句(除了定格书写的那一行,剩余的都是解释)
第二类:功能性语句:
1,从键盘获取一个变量的值----》read 

格式: 
     read  变量名1  变量名2  变量名3 。。。。 变量名N

所以打印提示语句有两种:
方式1: 
      echo 语句进行打印体术语句
方式2: 
      read -p "提示语句"  变量名 

2,通配符的转义:
软转义:带双引号即就是软转义,只允许出现特定的shell元字符,以及关闭掉通配符的含义
硬转义:带单引号就是硬转义,即会去掉shell元字符的含义或者通配符的含义
转义字符(以\开头):会去掉shell元字符的含义或者通配符的含义 ---》 \n  \t  \0 \b 
3,算术运算命令:
expr的命令:可以实现算术运算的功能---》加 ,减,乘,除,取余

注意: 
(1)使用expr的命令时,运算符前后都应该保留一个空格
(2)当时用*号时,应该使用硬转义或者转义字符\来进行处理

4,测试命令
test :可以测试的对象有三个:字符串,整数,文件属性
测试命令使用形式:
形式1:
      test 对象1  对象2 
形式2:
      [ 对象1 对象2 ]

测试字符串:
假设以str1和str2为例:
str1 = str2  --->测试两个字符串是否相等
str1 != str2  ---》测试两个字符串是否不相等
-z str1  ---》测试str1这个字符串的长度是否为0
-n str2  ---》测试str2这个字符串的长度是否不为0

测试整数:
假设以num1和num2为例:
num1 -eq num2 --->测试两个整数是否相等
num1 -ne num2 --->测试两个整数是否不相等
num1 -gt num2 ---->测试num1是否大于num2
num1 -ge num2  ---->测试num1是否大于等于num2
num1 -lt num2 --->测试num1是否小于num2
num1 -le num2 --->测试num1是否小于等于num2

测试文件属性:
Linux下有7种文件属性,假设以file1和file2为例:
-f file1 ---->测试file1是否存在并且为普通文件
-d file1 ---->测试file1是否存在并且为目录文件
-L file1 --->测试file1是否存在并且为链接文件
-r file1 --->测试file1是否存在并且具有可读权限
-w file1 --->测试file1是否存在并且具有可写权限
-x file1 --->测试file1是否存在并且具有可执行权限
-s file2 ----》测试file2是否存在且长度是否为0
file1 -nt file2  --->测试file1是否比file2更新(按照创建时间或者最新一次修改的时间)
file1 -ot file2 ---->测试file1是否比file2更旧(按照创建时间或者最新一次修改的时间)

第三类:结构性语句(分支语句 && 循环语句)
分支语句:
1.单分支格式: 
    if 语句块
    then
        命令表
    fi 
    

2.双分支格式: 
     if  语句块1
     then 
         命令表1
     else 
         命令表2
     fi 
     
3.多分支格式: 
     if 语句块1
     then 
         命令表1 
     elif 语句块2
     then
         命令表2 
     .....
     else
         命令表N
     fi 

4.switch_case的脚本格式:

case  常量   in
           模式1)
                 命令表1 
                 ;;
           模式2)
                 命令表2
                 ;;
           *)
              命令表N 
     esac

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值