标签:bash
linux下的bash编程简要学习
1.bash是什么:
linux运行时系统只会运行系统运行所需要的运行脚本即系统守护进程,一般根据用户自己需求设定和实现的服务需要手动启动,这种服务进程通常由bash启动,脚本中的命令通常被按照一定规则被bash读取视作参数,因此在脚本头部要申明运行的bash类型,bash命令分为内建命令及外部命令,外部命令通过PATH进行依次查找。
bash读取命令后将其启动(fork)成为一个进程,依次启动服务
2.bash控制语句:
本地变量:当前shell
环境变量:当前shell及其子shell
局部变量:某个函数内
位置变量:脚本或函数中引用传递参数
特殊变量:
$# 是传给脚本的参数个数
$0 是脚本本身的名字
$1 是传递给该shell脚本的第一个参数
$2 是传递给该shell脚本的第二个参数
$@ 是传给脚本的所有参数的列表
$* 是以一个单字符串显示所有向脚本传递的参数,与位置变量不同,参数可超过9个
$$ 是脚本运行的当前进程ID号
$? 是显示最后命令的退出状态,0表示没有错误,其他表示有错误
===========================================================
TEST1:
变量:
变量类型决定了变量一下三个点:
1.存储空间(存储数据空间)
2.参与运算类型
3.存储格式
变量引用:
变量引用分为一下三种方式:
1.强引用‘‘
2.弱引用""
3.命令引用$(COMMAND),`COMMAND`
===========================================================
Test2:
变量申明:
申明整型变量(默认为字符变量):
declare -i name[=value]
let name=value
环境变量:
export name[=value]
declare -x name[=value]
env,printenv,export查看全部环境变量
set可以查看全部变量
bash执行:
bash -n 检查脚本中语法错误
-x 调试脚本
可通过exit [n]更改命令返回值,exit会结束当前进程
bash控制:
条件判断:
通过控制条件实现程序的选择执行
1.根据运行命令的执行结果
2.测试表达式:
test EXPRESSION
[ EXPRESSION ]
[[ EXPRESSION ]]
整数测试:
$A -gt $B:是否大于
$A -ge $B:是否大于等于
$A -lt $B:是否小于
$A -le $B:是否小于等于
$A -eq $B:是否等于
$A -ne $B:是否不等
注意:整数测试默认做数值大小比较,所以不要给变量加引号
字符串测试:
字符串比较通过逐个字符的ASCII码值进行比较
"$A" > "$B":是否大于
"$A" < "$B":是否小于
"$A" == "$B":是否等于
"$A" != "$B":是否布冯
-z "$A" :是否为空,空为真
-n "$A" :是否不为空,不空为真
文件测试:
测试文件存在,存在状态及属性
-e $file:是否存在,存在为空
-a $file:是否存在,存在为空
-f $file:文件是否存在且为普通文件
-d $file:文件是否存在且为目录
-h $file:是否存在且为符号链接
-L $file:是否存在且为符号链接
-b $file:是否存在且为块设备文件
-c $file:是否存在且为字符文件设备
-S $file:是否存在且为套接字文件设备
-p $file:是否存在且为管道文件
-r $file:当前用户是否对文件拥有读权限
-w $file:当前用户是否对文件拥有写权限
-x $file:当前用户是否对文件拥有执行权限
-u $file:文件是否具备SUID权限
-g $file:文件是否具备SGID权限
-k $file:文件是否具备sticky权限
-O $file:当前用户是否为指定文件属主
-G $file:当前用户是否为指定文件属组
双目操作符:
$file1 -nt $file2:file1是否新于file2,比较时间为最近一次修改时间戳
$file1 -ot $file2:file1是否旧于,file1的最近一次修改时间是否早于file2
$file1 -ef $file2:file1与file2是否指向了同一个inode,是否为一个文件硬链接
条件控制:
if/then,case(PATTERN可为glob模式)
if CONDITION;then case $VARIBLE in
语句 PATTERN1)
fi 分支1
;;
if CONDITION;then PATTERN2)
语句 分支2
else ;;
语句 esac
fi
======================================================
**TEST3作业5:写一个脚本,若路径不存在则将其创建为目录,否则则显示其存在及内容类型
TEST4:shift
read:
read:与用户交互命令:
主要参数 -p "message":message显示给终端
-t #:多少秒内未输入自动退出
read a b 直接从键盘上读取数据,空格分开
==================================================
**TEST5作业6:写一个脚本,完成如下功能;判断给定的两个数值,孰大孰小;给定数值的方法:脚本参数,命令交互;
循环控制:
for,while,until
for:
while:
while CONDITION;do
循环体
done
当condition为真时执行,反之则退出
until:
until CONDITION;do
循环体
done
当CONDITION为假时执行,反之则退出
continue:跳出本次循环执行下次循环
break:直接退出循环
测试表达式(CONDITIDON):
整数测试:-gt,-lt,-ge,-le,-eq,-ne
字符串测试:==,<,>,!=,-z,-n,=~
注意格式: [ "hostname" == "localhost" ]
[[ "STRING" =~ PATTERN ]]
算术运算方式:
$[$A+$B]
$(($A+$B))
let variable=$A+$B
variable=$(expr $A + $B)
===========================================
用for,while,until三种方法求1-100和:
for:
while:
until:
**TEST作业7:三种方式求100以内所有奇数之和
组合测试条件:
条件间逻辑运算:
与:多个条件同时满足
或:多个条件满足一个条件即可
非:对指定条件取反
表达式组合:
与:[[ CONDITION1 -a CONDITION2 ]]
或:[[ CONDITION1 -o CONDITION2 ]]
非:[ ! CONDITION ]
短路操作符:
COMMAND1 && COMMAND2 || COMMAND3
===========================================
TEST6:获取当前主机hostname,若为空或localhost,则修改为admin
**TEST7作业8:传递两个文本文件路径给脚本,显示两文件中空白行较多的文件和其空白行数
显示两个文件中文件行数较多的文件及其总行数
TEST8:99乘法表:
**TEST作业9:
**TEST作业10:
function:
标签:bash
原文地址:http://610463479.blog.51cto.com/10539546/1695862