bash script 编程基础

1.何谓shell script
shell script是利用shell的功能写一个“程序”,这个程序是使用纯文本文件,将一些shell的语法与命令写在里面。
2.脚本或程序源文件都是纯文本文件。
3.脚本或程序的执行一般有两种方式:
编译执行:预处理-->编译-->汇编-->链接;编译执行是一种计算机语言的执行方式。
由编译程序将目标代码一次性编译成目标程序,再由机器运行目标程序。如:PASCAL,C,C++等语言。
效率高于解释执行。
解释执行:由解释器全程参与运行过程,每次读取一行,运行一行;程序是由一组执行和数据组成。
4.bash的执行过程
1>命令的执行是从上到下,从左到右的分析与执行
2>命令执行时,命令和参数间的多个空白都会被忽略
3>空白行也会被忽略
4>没读取一个Enter字符,就开始执行该程序
5>“#”作为批注,任何加在#后面的数据都将视为批注
6>shell script 都是以*.sh结尾,而且一个shell脚本能否被执行,必须得有x权限
7>bash shell程序 必须由bash进程来执行
5.bash shell 中的变量,什么是变量?变量就是程序中可变化的量,通过变量来命名内存空间。
bash的变量类型如下:
本地变量:当前shell进程;
环境变量:当前shell进程及其子进程;
局部变量:某个函数执行过程;
位置参数变量:在脚本中引用传递给脚本的参数;在函数中引用传递给函数的参数;
特殊变量:
$?:上一个命令执行状态的返回值:
程序执行可能有两种返回值:
1. 程序执行结果
2. 程序状态返回吗(0-255)
0 则为执行正确
1-255 则执行出错(1,2,127系统预留);
$#:获取当前shell命令行中参数的总个数
$*:获取当前shell的所有参数 “$1 $2 $3 …,受IFS控制
[email protected]:这个程序的所有参数 “$1″ “$2″ “$3″ “…”,不受IFS控制
$0 获取当前执行的shell脚本的文件名
$n 获取当前执行的shell脚本的第n个参数值,n=1..9
$$ 获取当前shell的进程号(PID)
$! 执行上一个指令的PID
自定义脚本的状态结果:
exit [n]
注意:脚本中任何位置执行了exit命令即会终止当前shell进程;
6.变量的类型:数值,字符,其中数值又可以分为整数和浮点数,字符分为ASCII和纯文本字符。
7.变量类型的作用:存储空间,进行数值运算,定义存储格式
8.bash的变量使用特点:弱类型、无须事先声明;
9.变量的命名规则:
     首个字符必须为字母(a-z,A-Z)
     中间不能有空格,可以使用下划线(_)
     不能使用标点符号
     不能使用bash里的关键字(可用help命令查看保留关键字)
10.本地变量和环境变量
1>本地变量:varname=value:作用域为整个bash进程可以使用。其中varname是变量名,=是赋值符号,
value是值
引用:
弱引用: "", 其内部的变量引用会被替换为变量值;
强引用:‘‘,其变量的变量引用会保持原有字符;
命令引用:`COMMAND`, $(COMMAND),引用命令的执行结果;
声明为整型:
declare -i name[=value]
let name=value
2>环境变量:被“导出”的本地变量,作用域为当前shell进程及其子进程,不能影响到其父进程
环境变量的两种常见的定义方法:
export name[=value]
declare -x name[=value]
查看所有环境变量:env, printenv, export ,环境变量的销毁也是使用unset  name
11.变量的生命周期,当一个shell进程终止后,变量就会自动销毁,或者手动销毁变量,可以使用unset 变量名

好了,现在我们开始进入bash shell的世界,首先我们通过bash shell 实现字符串的输出。为了以后编写shelll script 方便,建议大家建立一个~/scripts 目录,用于存放脚本。

其中#/bin/bash是shell编程的固定格式,来声明这个文件内的语法使用bash的语法,当这个程序执行时,它就能够加载bash的相关环境配置文件。整个script中,除了第一个“#”是用来申明shell之外,其他的#都是“批注”用途。为了以后方便查看shell script,建议写上本shell的功能,作者,时间等关键休息,如上所示。

bash的常用选项:

-n: 检查脚本中的语法错误;

-x:调试执行脚本;

检查脚本中的语法错误,什么都没有,说明没有语法错误。

[[email protected] scripts]# bash -n first.sh

调试执行脚本

[[email protected] scripts]# bash -x first.sh

+ echo -e ‘welcome to linux shell script.\a \n‘

welcome to linux shell script.

+ exit 0

自定义脚本的状态结果:

exit [n]

注意:脚本中任何位置执行了exit命令即会终止当前shell进程

//自定义状态返回值为1

//执行程序后查看 ,为1说明是正确的。

script的执行方式的区别(bash,source,.)

以下面的name.sh脚本为例

[[email protected] scripts]# sh name.sh //先用bash执行脚本

please input your first name: l

please input your last name: ys

Your full name is : lys

看到没有怎么设置好的变量firstname,lastname都没有值,这是为什么呢?当你使用直接执行的方式来处理时,系统会给与一个新的bash来执行name.sh里面的命令,因此我们这个变量firstname,lastname其实是在新的bash里面执行的,子进程完成后,子进程内的各项变量或操作将会结束而不会传回父进程中。下面我们用source或者.来执行看看。

我再echo $firstname $lastname 就有值了 。因为source和.会在父进程中执行,各项操作都会在原本的bash内生效。这下明白了bash,source和.执行shell脚本的区别了吧。

条件测试

如何测试一个shell脚本呢?除了根据运行的命令的状态结果外,我们还可以使用测试表达式。当我们要检测系统上某些文件或者相关属性时,就可以使用test这个命令来显示整个结果。

1.关于两个整数的比较,例如,num1 ,num2

测试的标志                                                             代表的意义

-eq                                                                        两数相等

-ne                                                                        两数不等

-gt                                                                         num1大于num2

-lt                                                                           num1小于num2

-ge                                                                        num1大于等于num2

-le                                                                         num1小于等于num2

2.字符串的数据,ASCII数值越大,字符比较时其值越大

测试的标志                                                                 代表的意义

-z string                                                  是否为空;空则为“真”,否则为“假”

-n string                                                 是否不空;不空则“真”,空则为“假”

test str1 = str2                                       判定str1是否等于str2,等于为真,不等于为假

test str1 != str2                                      判定str1是否不等于str2,不等于为真,等于为假

3.两个文件之间的测试,如test file1 和file2

测试标志                                                                  代表的意义

-nt                                                               判定file1是否比file2新

-ot                                                                判定file1是否比file2旧

-ef                                                                判定file1和file2是否为同一个文件

4.文件权限的检测

测试参数                                                                 代表的意义

-r                                                                          检测此文件是否存在且具有“可读”权限

-w                                                                         检测此文件是否存在且“可写”权限

-x                                                                          检测此文件是否存在且“可执行”权限

-u                                                                          检测此文件是否存在且“SUID”权限

-g 检测此文件是否存在且“SGID”权限

-k 检测此文件是否存在且“Sticky bit”权限

-s 检测此文件是否存在且为“非空白文件”

-O 当前用户是否为指定文件的属主

-G 当前用户是否为指定文件的属组

5.文件类型的判定

参数 代表的意义

-e 是否存在;存在则为“真”,否则为“假”

-f 该文件名是否为普通文件

-d 文件是否存在且为目录

-b 是否存在且为块设备文件

-c 是否存在且为字符设备文件

-S 是否存在且为套接字文件

-P 是否存在且为管道文件

-L 是否存在且为链接文件

特殊设备:

/dev/null: 空,bit buckets,吞下所有数据,并直接丢弃;

/dev/zero:吐出一堆0

时间: 2024-08-07 03:10:26

bash script 编程基础的相关文章

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

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

bash脚本编程基础

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

Bash shell编程基础

1.何谓shell script shell script是利用shell的功能写一个"程序",这个程序是使用纯文本文件,将一些shell的语法与命令(包括外部命令)写在里面,搭配正则表达式,管道命令与数据流重定向,条件判断语句等功能,以达到我们所想要的处理目的. 2.脚本或程序源文件都是纯文本文件. 3.脚本或程序的执行一般有两种方式: 编译执行:预处理-->编译-->汇编-->链接:编译执行是一种计算机语言的执行方式. 由编译程序将目标代码一次性编译成目标程序,再

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

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

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

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

linux学习19 shell脚本基础-bash脚本编程基础及配置文件

一.shell脚本编程 1.编程语言的分类,根据运行方式 a.编译运行:源代码 --> 编译器(编译) --> 程序文件 C语言: b.解释运行:源代码 --> 运行时启动解释器,由解释器边解释边运行:即源代码本身并不能运行,而是启动一个解释器的进程,把整个源代码的内容当做解释器的参数.因为其是边解释边运行因此运行过程中比起编译运行速度会差一些. c.无论是编译器还是解释器中间总需要另外一个程序,即在运行过程中全程参与,这就是我们说的翻译官,他需要将我们人能识别的代码转换成机器所能识别的

Bash脚本编程——基础特性

1.命令别名(alias) 1.1 alias命令实现 (1) alias  显示当前shell进程所有可用的命令别名: (2) alias NAME='VALUE'  定义别名NAME,其相当于执行命令VALUE: 注意:在命令行中定义的别名,仅对当前shell进程有效:如果想永久有效,要定义在配置文件中.仅对当前用户:~/.bashrc,对所有用户有效:/etc/bashrc. Note: 编辑配置给出的新配置不会立即生效: bash进程重新读取配置文件: source /path/to/c

《学习bash》笔记--基础shell编程

1.shell脚本和函数 脚本是包含shell命令的文件,它是一个shell程序,有三种方式运行它们: 一是键入source scriptname,使得脚本的命令被读取并运行,就好像键入它们一样. 二是运行bash scriptname,打开一个子shell来读取并执行脚本文件中命令.该脚本文件可以无"执行权限". 三是使用./scriptname,打开一个子shell读取并执行脚本文件中的命令,该脚本需要"执行权限". 1.1.函数 函数是一种脚本内脚本,你使用它

Bash编程基础知识学习第一节

Bash编程基础知识学习 一.bash的由来 1 .什么是Bash 什么是Shell Bash 是GNU Bourne-Again SHell,是目前大多数Linux发行版采用的Shell. Shell 是*nix提供给用户使用的界面.一个操作系统的底层是独立运行的, 用户界面和底层分开,可以最大限度的保证系统稳定.Shell就是一个特殊的程序,负责接受用户的命令,并把系统的响应返回给用户. Bash Shell 一般不需要自己安装,在安装发行版的同时都会安装好. Shell的存在是和登陆相关的