标签: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脚本编程(一)
原文地址:http://563349612.blog.51cto.com/11096134/1837646