码迷,mamicode.com
首页 > 系统相关 > 详细

shell脚本编程(一)

时间:2016-08-14 02:06:57      阅读:345      评论:0      收藏:0      [点我收藏+]

标签: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控制

$@:这个程序的所有参数 “$1″ “$2″ “$3″ “…”,不受IFS控制

$0 获取当前执行的shell脚本的文件名

$n 获取当前执行的shell脚本的第n个参数值,n=1..9

$$ 获取当前shell的进程号(PID)

$! 执行上一个指令的PID

$*与$@的区别测试实例:

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

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

技术分享

2、执行该脚本:

技术分享

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

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

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

技术分享


技术分享

执行test2.sh:

技术分享

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

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

$@: 传递给脚本的所有参数,每个参数为独立字符串

注意:

$@ $* 只在被双引号包起来的时候才会有差异

二、算术运算:

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不够权限控制,使用普通用户测试。



本文出自 “每天进步一点点” 博客,谢绝转载!

shell脚本编程(一)

标签:shell脚本编程(一)

原文地址:http://563349612.blog.51cto.com/11096134/1837646

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!