shell脚本编程(一)

一、bash变量:

变量命名法则:

1、不能使程序中的保留字:例如if, for;

2、只能使用数字、字母及下划线,且不能以数字开头

3、见名知义

4、统一命名规则:驼峰命名法

bash变量类型:

本地变量

局部变量

环境变量

位置变量

特殊变量(内置)

变量类型的区别:

一、本地变量:

varname=value:作用域为整个bash进程可以使用;

二、局部变量:

local varname=value:作用域为当前代码段;

三、环境变量:

作用域为当前shell进程及其子进程,不能影响到其父进程;

export varname=value “导出”,如果变量已经定义可以只是用变量名 export varname,即

1. export varname=value

2. varname=value

export varname

脚本在执行命令时会启动一个子shell环境变量:

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

四、位置变量:

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

cat first.sh test.txt hello

$1: first.sh

$2: test.txt

$3: hello

shift:踢掉参数

shift n:踢掉n个参数,默认踢掉一个参数

五、特殊变量:

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

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

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

$*与[email protected]的区别实例:

首先来看一个执行脚本之后他们两者结果相同的例子:

1、创建一个脚本内容如图:

2、执行该脚本:

可以看出两者结果是相同的。

下面来看一个执行结果不同的例子:

创建两个脚本,内容如图:

执行test2.sh:

执行之后,可以得出结论:

$*: 传递给脚本的所有参数,全部参数合为一个字符串

[email protected]: 传递给脚本的所有参数,每个参数为独立字符串

注意:

[email protected] $* 只在被双引号包起来的时候才会有差异

二、算术运算:

bash中的算术运算:help let

+, -, *, /, %取模(取余), **(乘方)

实现算术运算:

(1) let var=算术表达式

(2) var=$[算术表达式]

(3) var=$((算术表达式))

(4) var=$(expr arg1 arg2 arg3 ...)

(5) declare –ivar= 数值

(6) echo ‘算术表达式’ | bc

乘法符号有些场景中需要转义,如*

三、条件测试:

判断某需求是否满足,需要由测试机制来实现;

专用的测试表达式需要由测试命令辅助完成测试过程;

评估布尔声明,以便用在条件性执行中

若真,则返回0

若假,则返回1

测试命令:

test EXPRESSION

[ EXPRESSION ]

[[ EXPRESSION ]]

注意:EXPRESSION前后必须有空白字符

数值测试:

-gt: 是否大于

-ge: 是否大于等于

-eq: 是否等于

-ne: 是否不等于

-lt: 是否小于

-le: 是否小于等于

文件测试:

存在性测试

-a FILE:同-e

-e FILE: 文件存在性测试,存在为真,否则为假;

存在性及类别测试

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

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

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

-f FILE:是否存在且为普通文件;

-h FILE 或-L FILE:存在且为符号链接文件;

-p FILE:是否存在且为命名管道文件;

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

使用read命令来接受输入:

使用read来把输入值分配给一个或多个shell变量:

-p指定要显示的提示

-t TIMEOUT

read从标准输入中读取值,给每个单词分配一个变量

所有剩余单词都被分配给最后一个变量

read -p “Enter a filename:“ FILE

实例:

1、编写脚本/root/bin/argsnum.sh,接受一个文件路径作为参数;如果参数个数小于1,则提示用户“至少应该给一个参数”,并立即退出;如果参数个数不小于1,则显示第一个参数所指向的文件中的空白行数

#!/bin/bash

[ $# -lt 1 ] && echo "At least give a parameter." || grep -c ‘^[[:space:]]*$‘ $1

2、编写脚本/bin/per.sh,判断当前用户对指定的参数文件,是否不可读并且不可写

#!/bin/bash

! [ -r /tmp/file1 -o -w /tmp/file1 ] && echo "`whoami` can not r and w" || echo "`whoami` can r or w"

#root不够权限控制,使用普通用户测试。

时间: 2024-08-27 14:54:22

shell脚本编程(一)的相关文章

shell脚本编程学习笔记(1)

在linux上编程,离不开shell,计划好好看看shell编程,并在这里做些笔记以供有相同兴趣的人分享,主要参考<shell脚本学习指南>. 学习shell脚本编程之前,需要了解脚本编程语言和编译型语言的概念. 一般很多中型.大型的程序是用编译型语言写成的,比如C.C++.Java等.这类程序从源代码编译成目标代码,直接通过计算机执行.编译型语言执行效率比较高,大多运作于底层,处理的是字节.整数.浮点数等机器层级的对象,因此实现一个具体的功能,比如"将一个目录里的所有文件复制到另外

Shell脚本编程知识点总结及范例

 一:关于语言 1)编译性语言 编译型语言多半运作于底层,所处理的是字节.整数.浮点数或其它及其机器层经的对象.处理过程为:源程序--预处理--编译--汇编--链接,编译性语言为静态语言. 2)解释性语言 解释性语言读入程序代码并将其转化为内部的形式加以执行.处理过程:解释性(文本文件)-解释器去读取并执行.解释性语言为动态语言. 二:基础 变量类型 linux脚本中的变量不需要事先声明,而是直接定义使用(这点不同于其他高级编程语言中变量的使用)bash变量类型分为本地变量和环境变量. 本地变量

shell脚本编程——流程控制

shell脚本编程--流程控制 目   录 一. if 二. case 三. for 四. while 五. until 六. 综合应用 一.if 1.语法 (1)单分支 if  判断条件:then fi (2)双分支 if 判断条件; then 条件为真的分支代码 else 条件为假的分支代码 fi (3)多分支 if 判断条件1; then 条件为真的分支代码 elif 判断条件2; then 条件为真的分支代码 elif 判断条件3; then 条件为真的分支代码 else 以上条件都为假

shell脚本编程的选择分支结构

选择执行结构: if语句单分支结构:如果条件为真,则执行then后的命令,否则,不做任何操作: if CONDITION :then STATEMENT fi 或 if CONDITION ; then STATEMENT1 STATEMENT2 ... fi 注意:想要执行then后面的STATEMENTS,前提条件是CONDITION部分为真: if语句的双分支结构:如果条件为真,就执行then后面的命令:否则就执行else后面的命令: if CONDITION ; then STATEME

shell脚本编程的一些好习惯

shell脚本编程的一些好习惯 1.命名规则 脚本命名以.sh结尾,名称尽量见名之意.以下是几种可供参考的脚本命名风格.通过以下清新脱俗的风格,读者能够很easy的明白脚本的作用.         clearlog.sh          ClearLog.sh          clearSql.sh         snmp_install.sh         Monitor.sh 2.脚本信息 为脚本加入生动的信息,比如脚本功能的描述,作者,时间,版本信息等.     #!/bin/ba

shell脚本编程之基础篇(二)

shell脚本编程之基础篇(二) ============================================================================== 概述: ============================================================================== 退出状态 ★进程使用退出状态来报告成功或失败 ◆0 代表成功,1-255代表失败 ◆$? 变量保存最近的命令退出状态 (查看:echo $?)

Linux系统shell脚本编程——生产实战案例

Linux系统shell脚本编程--生产实战案例     在日常的生产环境中,可能会遇到需要批量检查内网目前在线的主机IP地址有哪些,还可能需要检查这些在线的主机哪些端口是开放状态,因此依靠手工来检查是可以实现,但比较费时费力,所以需要结合shell脚本来实现批量检查的功能,那么今天就来做个小小的实验. 1.开发脚本前准备 一般大家都知道,测试主机是否在线,常用的命令无非就是ping.nmap,因此,首先找一个地址来测试下ping命令的效果 [[email protected] scripts]

Linux中的shell脚本编程——函数

概述: 本章节将总结while,for循环语句的特殊用法,在不同的场景当中,更能发挥其功能和价值.除此之外,还会介绍一种特殊的循环语句select语句,实现菜单的作用.最重要的是讲解shell脚本编程中函数的用法.这些内容都要熟练掌握. 一.循环语句的特殊用法: 1.while循环的特殊用法(遍历文件的每一行): □语法:while read line; do 循环体 done < /PATH/FROM/SOMEFILE □意义:依次读取/PATH/FROM/SOMEFILE文件中的每一行,且将

Linux 的shell脚本编程

shell脚本编程 程序:指令+数据 程序编辑风格:             过程式:以指令为中心,数据服务于指令             对象式:以数据为中心,指令服务于数据 shell程序:提供了编程能力,解释执行 计算机:运行二进制指令 编程语言: 低级:汇编语言 高级:编译:高级语言-->编译器-->目标代码 java,c#,c,c++ 解释:高级语言-->解释器-->机器代码 shell,per,python 编程逻辑处理方式:           顺序执行      

Shell脚本编程30分钟入门

什么是Shell脚本 示例 看个例子吧: #!/bin/sh cd ~ mkdir shell_tut cd shell_tut for ((i=0; i<10; i++)); do touch test_$i.txt done 示例解释 第1行:指定脚本解释器,这里是用/bin/sh做解释器的 第2行:切换到当前用户的home目录 第3行:创建一个目录shell_tut 第4行:切换到shell_tut目录 第5行:循环条件,一共循环10次 第6行:创建一个test_1…10.txt文件 第7