bash 脚本编程 变量、变量类型 (笔记)

简介:

hell 脚本编程

fgrep fast grep 快速检索文本但是不支持正规则表达式


编程语言: 机器语言、汇编语言、高级语言(需编译)

编译器or解释器: 是用来把人类所能识别的语言(通常为高级语言)翻译成机器所能识别

                 的语言(即机器语言)

静态语言:编译型语言 强类型(变量) 关键字 事先完全转换成可执行格式

            C、C++、JAVA、C#...等

动态语言:解释型语言 强类型(变量) 边解释边执行

          PHP、SHELL、Python、Perl


编程模型:

    面向过程: 所对应的语言:Shell C

    面向对象: 所对应的语言:JAVA Python Perl C++


变量:变量来源于数学,是计算机语言中能储存计算结果或能表示值抽象概念。变量可以通过变量名访问。

内存:编址的存储单元


程序运行产生进程

变量类型: 字符 数值(数值分为整形,浮点形) 事先确定数据的存储格式和长度。


逻辑运算(布尔定律):与 and 只有同时为真值为真,近似乘法 (串连电路 两个开关)

                      或 or  只有同时为假值为假,近似加法 (并连电路 两个开关)

                    异或 xor 相同为假 不同为真

                      非      非0等于1 非1等于0

shell属于弱类型编程语言

强: 变量在使用前,必须事先声明,甚至还需要初始化null

弱: 变量用时声明,甚至不区分类型(默认为字符串)

变量赋值:VAR_NAME=VALUE


bash变量类型:

    环境变量: 整个shell进程 作用域为当前shell进程及其子进程都可引用 

               export VARNMME=VALUE 导出

    本地变量(局部变量): 仅在当前一段代码有效 Local VARNAME=VALUE

    位置变量:$1,$2,$3 ...等

    特殊变量:$? 上一个命令的执行状态返回值


程序执行,可能有两类返回值:

程序执行结果,程序状态返回代码(0-255)

    0     表示正确执行

    1-255 错误执行

    1,2,127,此三个错误执行代码,系统预留。

/dev/null 软件设备 bit bucket位桶 数据黑洞,任何数据放到此文件夹下,就会变为空


脚本在执行时会启动一个子shell进程

命令行中启动的脚本会继承当前shell环境变量

系统自动执行的脚本(非命令行启动)就需要自我定义需要的各环境变量

    

""双引号 弱引用可做变量替换

    例:[root@localhost ~]# NAME=ljm
        [root@localhost ~]# echo "This is $NAME"
        This is ljm
        [root@localhost ~]# 

''单引号 强引用 不可变量替换

    例:[root@localhost ~]# NAME=ljm
        [root@localhost ~]# echo "This is $NAME"
        This is $NAME
        [root@localhost ~]# 


设置变量 set VARNAME=VALUE 或者 VARNAME=VALUE 可直接变量加变量值即可不加set也可以

撤消变量 unset VARNAME 

只要操作变量本身而非变量值则不需要加$符号,

变量新加值 VARNAME=$VARNAME:VALUE

查看变量 set 不加参数(参加当前shell变量 环境变量+本地变量)

查看环境变量 printevn    env    export 三个命令都可

注:特殊变量和位置变量不可查看


对于shell来讲默认所有变量的值都是字符串,所以字符串默认不可做字符运算


脚本: 命令的堆砌,按实际需要,结合命令流程控制机制实现的源程序。 .sh结尾


shebang 魔数 #!/bin/bash

    内核无法直接识别ASCII码文本,内核所能识别的elf格式的文件(Elf文件是一种二进制文件,可执行文件,目标代码,共享库和核心转储的标准文件格式)若想让内核识别脚本必须借助解释器来转换。所以脚本是借助bash可执行程序来执行的,即脚本前需加 #!/bin/bash 内核无法识别但看到此会把这个脚本交给bash程序处理,即可执行此文件。

Shebang 这个符号通常在unix 系统的脚本中第一行开关中写到,它指明了执行这个脚本文件的解释程序

    1.如果脚本文件中没有#!这一行,那么执行时默认以当前shell去解释这个脚本(即:$shell环境变量)

    2.如果#!之后的解释程序是一个可执行文件,那么执行这个脚本时就会把文件名及其数据传给那个解释程序去执行。

    3.如果#!指定的解释程序没有可执行权限,则会报错“bad interpreter: permission denied "如果#!指定的解释程序不是一个可执行文件,那么指定的解释程序会被忽略,转而交给当前shell去执行这个脚本。

    4.如果#!指定的程序不存在,那么会报错"bad interpreter:No such file or directory."注意#!之后的解释程序,需要写绝对路径(如:/bin/bash),且是不会自动到$PATH中寻找解释器的。

    5.如果你使用"bash test.sh"这样的命令来执行脚本那么#!这一行将会被忽略掉,且脚本文件中可以没有执行权限也能被执行。解释器是用命令行中显式指定的bash。 #为注释行。

本文转自Winthcloud博客51CTO博客,原文链接http://blog.51cto.com/winthcloud/1622155如需转载请自行联系原作者


Winthcloud

相关文章
|
1月前
|
Devops 关系型数据库 大数据
1000个开源免费的bash脚本合集
【10月更文挑战第4天】
|
3月前
|
Shell
一个能够生成 Markdown 表格的 Bash 脚本
【8月更文挑战第20天】这是一个使用Bash脚本生成Markdown表格的示例。脚本首先设置表头与内容数据,然后输出Markdown格式的表格。用户可以根据需要自定义表格内容。使用时,只需将脚本保存为文件(如 `generate_table.sh`),赋予执行权限,并运行它,即可在终端看到生成的Markdown表格。
|
3月前
|
Unix Shell Linux
在Linux中,什么是Bash脚本,并且如何使用它。
在Linux中,什么是Bash脚本,并且如何使用它。
|
3月前
|
Shell 开发者
深入理解Bash脚本中的函数
【8月更文挑战第20天】
60 0
|
3月前
|
存储 Shell 数据处理
深入探讨Bash脚本中的数组
【8月更文挑战第20天】
31 0
|
3月前
|
存储 Shell
Bash 脚本中的 `hash` 命令
【8月更文挑战第19天】
34 0
|
5月前
|
Unix Shell Linux
技术经验分享:Bash脚本命令使用详解
技术经验分享:Bash脚本命令使用详解
47 0
|
存储 Shell 测试技术
开始你的bash/shell脚本编程
原文链接 I love bash 对于我自己来说,学习新框架或技术的最佳方式是同时获得实践经验,在本文中,你将自己通过编写代码来学习shell脚本的基础知识!本文包含语法,shell脚本的基础知识到中级shell编程,通过这篇文章你可以学习shell的相关知识,并且通过shell来实现Unix/Linux之间的接口 1_qo-oir60xdhic3wjqpu64g 介绍 您可能已经多次遇到过“脚本”这个词,但脚本的的含义是什么意思呢?简单的来说,脚本是包含一系列要执行的命令。
1270 0
|
Shell 数据安全/隐私保护 C++
bash脚本编程
编程语言: 编译器,解释器 编程语言:机器语言,汇编语言、高级语言 静态语言:编译型语言 强类型(变量) 关键字: 事先转换成可执行格式 c,c++,JAVA,C# 动态语言:解释型语言 on the fly 弱类型 边解释变执行 p...
1073 0