bash脚本基础

编程基础:程序:指令+数据
                过程式:以指令为中心,数据服务于指令
                对象式:以数据为中心,指令服务于数据
shell程序:提供了编程能力,解释执行
编程语言:低级:汇编
               高级:
                        编译:高级语言–>编译器–>目标代码    java,c#
                        解释:高级语言–>解释器–>机器代码    shell,perl,python
编程逻辑处理方式:
                顺序执行
                循环执行
               选择执行
                           shell编程:过程式、解释执行
编程语言的基本结构:
                          各种系统命令的组合
数据存储:变量、数组
表达式:a + b   
语句:if
shell脚本:包含一些命令或声明,并符合一定格式的文件
格式要求:#!/bin/bash
               #!/usr/bin/python
               #!/usr/bin/perl
shell脚本的用途:
                    自动化常用命令
                    执行系统管理和故障排除
                    创建简单的应用程序
                   处理文本或文件
shell脚本的创建:
                   使用文本编辑来创建文本文件
                   第一行必须包括shell声明序列:#!/bin/bash    
                  #注释行 (可以写上时间,作者,做什么用)
写完后运行脚本:
                      bash -n file  检测脚本中的语法错误,但不能检查命令错误
                      bash -x file  调试执行,可以检查命令错误
                      chmod +x file 后 建议使用bash file 运行    
变量:
字符型:
数值型:整型,浮点型
变量命名法则:
        1 、不能使程序中的保留字:例如if, for
        2 、只能使用数字、字母及下划线,且不能以数字开头
        3 、见名知 义
        4 、统一命名 规则:驼峰命名法
强类型:定义变量时必须指定类型、参与运算必须符合类型要求;调用未声明变量会产生错误    如: java,c

弱类型:无须指定类型,默认均为字符型;参与运算会自动进行隐式类型转换;变量无须事先定义可直接调用
       如:bash  不支持浮点数,python

bash中的变量种类:
            本地变量:生效范围为当前shell 进程;对当前shell 之外的其它shell 进程,包括当前shell 的子shell 进程均无效
            环境变量:生效范围为当前shell进程及其子进程
            局部变量:生效范围为当前shell 进程中某代码片断( 通常指函数)

位置变量:$1, $2, … 来表示,用于让脚本在脚本代码中调用通过命令行传递给它的参数

变量赋值:name=‘value’
      可以使用引用value:
             (1)  可以是直接字串; name=“root”
             (2)  变量引用:name=”$USER”
             (3)  命令引用:name=COMMAND name =$(COMMAND)
       变量引用:$name
                       “” :弱引用,其中的变量引用会被替换为变量值
                        ” :强引用,其中的变量引用不会被替换为变量值,而保
持原字符串
?  显示已定义的所有变量:set
?  删除变量:unset name

变量声明、赋值:  定义环境变量
                    exprot name=value
                    declare -x name=value
显示所有环境变量:
                        export
                        env
                        printenv
                       删除定义的变量:unset name    (养成习惯,每次在结束后删除定义的变量)
bash 有许多内建的环境变量: :PATH, SHELL, USRE,UID,HISTSIZE, HOME, PWD, OLDPWD, HISTFILE

只读变量:只能声明,但不能修改和删除
声明只读变量:
                readonly name
                declare -r name
查看只读变量:
                readonly -p

位置变量:在脚本代码中调用通过命令行传递给脚本参数
$1, $2, … :对应第1 、第2 等参数,shift [n]
        $*:  传递给脚本的所有参数,全部参数合为一个字符串
        [email protected]:  传递给脚本的所有参数,每个参数为独立字符串
        $#:  传递给脚本的参数的个数
        [email protected] $*  只在被双引号包起来的时候才会有差异
        set —  清空所有位置变量

当位置参数达到10以上需要加上大括号 比如 ${10} ${11} 

$0     脚本名 使用basename可以取基名
      shift #  清理单独的位置参数#清理多少个 
bash 中的算术运算:help let
                          +, -, *, /, % 取模(取余), ** (乘方)
实现算术运算:
(1) let var= 算术表达式
(2) var=$[ 算术表达式]       (建议使用中括号,方便查看脚本)
(3) var=$(( 算术表达式))
(4) var=$(expr arg1 arg2 arg3 …)
(5) declare –i var =  数值
(6) echo ‘ 算术表达式’ | bc
       乘法符号有些场景中需要转义 ,如*
bash 有内建的随机数生成器:$RANDOM (1-32767)
                                        echo $[$RANDOM%50]  :0-49 之间随机数

增强型赋值:
               +=, -=, *=, /=, %=
               let varOPERvalue

自增,自减:

j=i++   先赋值给j,然后再加1
                            j=++1   先加1赋值给j,

逻辑运算: ||     &&    !
                异或:^     异或的两个值,相同为假,不同为真
进程使用退出状态来报告成功或失败
               ? 0 代表成功,1 -255 代表失败
               ? $?  变量保存最近的命令退出状态

条件测试:
               判断某需求是否满足,需要由测试机制来实现
               专用的测试表达式需要由测试命令辅助完成测试过程 
评估布尔声明,以便用在条件执行中
              若真,则返回0
              若假,则返回1
测试命令:
? test EXPRESSION
            ? [ EXPRESSION ]
            ? [[ EXPRESSION ]]
        注意:EXPRESSION 前后必须有空白字符
            $ [ “$A” == “$B” ] && echo “Strings are equal”
            $ [ “$A” -eq “$B” ] && echo “Integers are equal”

根据退出状态而定,命令可以有条件地运行   &&     ||

数值测试:
               -gt:  是否大于             -ge:  是否 大于等于
               -eq:  是否等于             -ne:  是否 不等于
               -lt:  是否小于               -le:  是否 小于等于

字符串测试:
                        == :是否等于;
                           >: ascii 码是否大于ascii码
                           <:  是否小于
                          !=:  是否不等于
                         =~:  左侧字符串是否能够被右侧的PATTERN所 所 匹配
注意:  此表达式一般用于[[ ]] 中;扩展的正则表达式
                         -z “STRING” :字符串是否为空,空为真,不空为假
                         -n “STRING” :字符串是否不空,不空为真,空为假
               注意:用于字符串比较时的用到的操作数都应该使用引号

文件测试:
-e FILE:  文件存在性测试,存在为真,否则
-d FILE:   是否存在且为目录文件
-b FILE:   是否存在且为块设备文件
…….
文件权限测试:-r    -w     -x    是否存在且有权限 
特殊权限测试:-u    -g     -k    是否存在且有特殊权限
文件大小测试:-s         是否存在且非空
文件是否打开:-t fd   fd 表示文件描述符是否已经打开且与某终端相关      -N FILE :文件自动上一次被读取之后是否被修改过 
 -O FILE : 当前有效用户是否为文件属主
 -G FILE :当前有效用户是否为文件属组
双目测试:
FILE1 -ef FILE2: FILE1 与FILE2 是否指向同一个设
备上的相同inode
FILE1 -nt FILE2: FILE1 是否新于 于FILE2
FILE1 -ot FILE2: FILE1 是否旧于 于FILE2

组合条件测试:
第一种方式:
COMMAND1 && COMMAND2  并且
COMMAND1 || COMMAND2  或者
! COMMAND 非 
如:[[ -r FILE ]] && [[ -w FILE ]]
第二种方式:
EXPRESSION1 -a EXPRESSION2  并且
EXPRESSION1 -o EXPRESSION2  或者
! EXPRESSION
必须使用测试命令进行

使用read命令来接受输入:
                               -p 指定要显示的提示
                               -s 静默输入
                               -n N  指定输入的字符长度N
                               -d ‘ 字符’ 输入结束符
                               -t N TIMEOUT 为N秒
                       read 从标准输入中读取值,给每个单词分配一个变量,所有剩余单词都被分配给最后一个变量
                       read -p “Enter a filename: “ FILE

bash如何展开命令行
   把命令行分成单个命令词
   展开别名
   展开大括号种的声明({})
   展开波浪符声明(~) 
   命令替换$() 和 “) 
   再次把命令行分成命令词
   展开文件通配(* 、? 、[abc] 等等)
   准备I/0 重导向(< 、>) 
   运行命令

防止扩展:反斜线(\ )会使随后的字符按原意解释
              加引号来防止扩展
             ?  单引号(’ )防止所有扩展
             ?  双引号(” )也防止所有扩展,但是以下情况例外:
                 $ (美元符号) - 变量扩展
                  ` (反引号) - 命令替换
                  \ (反斜线) - 禁止单个字符扩展
                  ! (叹号) - 历史命令替换

bash的配置文件:
按生效范围划分,存在两类:
           全局配置:
                        /etc/profile
                       /etc/profile.d/*.sh
                       /etc/bashrc
           个人配置:
                       ~/.bash_profile
                       ~/.bashrc
修改profile 和bashrc 文件后需生效
         两种方法:
                       1 重新启动shell 进程

2 .  或source    (使用source)

bash退出任务:
                保存在~/.bash_logout 文件中(用户)
                在退出登录shell 时运行
         用于
               ? 创建自动备份
               ? 清除临时文件

时间: 2024-10-25 04:17:02

bash脚本基础的相关文章

跟马哥学linux (lesson 7)Bash脚本基础知识

一.Linux程序分类: 1.守护进程(Daemon):开机自动启动 常见linux后台守护进程列举: amd:NFS守侯进程 apmd:高级电源治理 Arpwatch:记录日志并构建一个在LAN接口上看到的以太网地址和ip地址对数据库 Autofs:自动安装治理进程automount,与NFS相关,依靠于NIS crond:linux下的计划任务 Dhcpd:启动一个DHCP(动态IP地址分配)服务器 Httpd:WEB服务器 Inetd:支持多种网络服务的核心守候程序 Lpd:打印服务器 n

linux Bash脚本基础符号总结 (一)

1.初识Bash 首先编译一个简单的bash vim hello.sh 使用vim编辑hello.sh ,输入如下代码并保存: #!/bin/bash echo hello word 运行Bash脚本的方式: # 使用shell来执行 $ sh hello.sh # 使用bash来执行 $ bash hello.sh 还可以让脚本本身就具有可执行权限,通过chmod命令可以修改: # 赋予脚本的所有者该执行权限,允许该用户执行该脚本 $ chmod u+x hello.sh # 执行命令,这将使

bash脚本基础入门之条件测试

在运行bash命令的时候,无论成功还是失败都会返回为用户返回一个执行的结果,通常把他叫做退出状态码,每当我们运行命令的时候,退出状态码都会被记录在$?变量中,在命令行echo $?可以查看命令的执行结果,成功的值为0,失败的值为1-255之间的某个值. 注:在shell脚本中,退出状态码记录的是脚本最后一条命令,为方便检查脚本错误,可以使用exit #自定义退出状态码. shell结构化命令中,如if...then语句.while...do...done语句等的CONDITION条件都是以命令的

DAY9:bash脚本编程基础(1)

内容主要为: 一.编程基础 二.shell脚本及其基本格式 三.变量 四.运算 五.条件测试 六.流程控制 一.编程基础 1)程序 程序:指令+数据 程序编程风格: 过程式:以指令为中心,数据服务于指令(C,bash) 对象式:以数据为中心,指令服务于数据 (java,C++,Python) shell程序:提供了编程能力,解释执行 2)程序的执行方式 计算机:运行二进制指令: 编程语言: 低级:汇编 高级: 编译:高级语言-->编译器-->目标代码 java,C# 解释:高级语言-->

Linux基础之bash脚本编程初级-逻辑运算与测试

引言 前面介绍了bash编程的基础变量与算术表达式,本文介绍在脚本中的进阶知识:测试 在bash中测试大体分两部分:条件测试.组合测试. 而条件测试有分:数值测试.字符串测试.文件测试. 组合测试则有两种表达方式.具体是什么表达方式在文章中会有具体展示. 本文实验环境为CentOS7.2 Linux中为什么要学习测试(判断)? 当我第一次学习这部分内容时,觉得好难,好不爽.可是这又是想要继续学习Linux必须要掌握的知识点.为什么?我们在生活中面对各种选择时总要问问自己,我是否应该怎样,不这样会

bash脚本编程基础

bash编程   bash脚本编程是过程式解释编程,其实就是linux命令的堆砌,既然是编程就应该有相应编程语法.    与任何过程式编程一样,过程式编程的特点就是:顺序执行,选择执行,循环执行.    过程式编程:以指令为中心,设计算法,数据服务于算法,过程式编程的灵魂:算法.    1.变量:数值变量,字符变量           bash环境:                本地变量:当前shell进程:                环境变量:当前shell进程及其子进程:       

bash脚本编基础

使用多个命令(;): 如果需要两个或多个命令一起执行,用分号把这些命令隔开: #date ; ifconfig eth0 Sat Nov  1 08:47:46 CST 2014 eth0      Link encap:Ethernet  HWaddr 00:50:56:9F:22:36 inet addr:192.168.57.23  Bcast:192.168.57.255  Mask:255.255.255.0 inet6 addr: fe80::250:56ff:fe9f:2236/6

bash脚本编程基础及配置文件

shell脚本编程: 编程语言的分类:根据运行方式 编译运行:源代码----->编译器(编译)---->程序文件 C语言: 解释运行:源代码--->运行时启动解释器,由解释器边解释边运行: 根据其编程过程中功能的实现是调用库还是调用外部的程序文件: shell脚本编程: 利用系统上的命令及编程组件进行编程: 完成编程: 利用库或编程组件运行编程 编程模型: 过程式编程语言,面向对象的编程语言 程序=指令+数据 过程式:以指令为中心来组织代码,数据是服务于代码: 顺序执行 选择执行 循环执

bash脚本编写基础

bash脚本的编写     命令的堆砌     1.脚本绝对第一行从第一个字符位置开始给出shebang:         #!bin/bash             声明脚本要用bin目录下的bash来执行,而不是csh或者什么别的.             2.运行脚本         1>给脚本执行权限,而后指定脚本路径并运行之             chmod +x first.sh             或者直接指定权限:bash first.sh         2>bash