bash基础
发表于:2024-11-30 作者:千家信息网编辑
千家信息网最后更新 2024年11月30日,基础知识: 变量: 变量名+指向的内存空间; 变量赋值: var_name=value; 变量类型: 数据存储的格式,表示的数据范围; 字符型,数字
千家信息网最后更新 2024年11月30日bash基础
基础知识:
变量: 变量名+指向的内存空间; 变量赋值: var_name=value; 变量类型: 数据存储的格式,表示的数据范围; 字符型,数字型,布尔型; C语音是强变量类型(使用前必须声明类型,类型声明后不能改变);bash是弱变量类型(无需事先声明, 类型随需求改变); bash默认变量类型为字符型; 要进行算术运算,需要声明为数字型: declare -i var_name 变量引用: ${var_name} $var_name
算术运算:
let VAR=expression; VAR= $[expression]; VAR= $((expression)); VAR= $(expr argu1 argu2 argu3 ) 注意:有些时候乘法符号需要用转义字符; 增强型赋值: += ,-= , *=, %= 变量做某种运算后回存到此变量中 let i=$i+n ---> let i+=n --->这个let的变量不用出现$ let i+=1 ---> let i++ let i-=i ---> let i--
条件测试:
(1)执行命令,并利用命令返回状态判断, $? 0: 成功 ,1~255失败 脚本的状态返回值:默认是返回最后一条命名的状态返回值 自定义退出状态码:exit [n]: n为指定的状态码 (2)测试表达式 test expression [ expression ] ----注意expression两边必须有空白字符 [[ expression ]] 数值测试: -eq: 是否等于 [ $sum1 -eq $sum2 ] -ne: 是否不等于 -gt: 是否打于 -ge: 是否大于等于 -lt: 是否小于 -le: 是否小于等于字符测试: ==: 等于 >: 大于 <: 小于 != 不等于注意: a.字符串要加双引号; b.字符串测试要是有[[ ]]; =~ : 左侧字符串是否能够被右侧的PATTERN所匹配; -z "string": 判断指定的字符串是否为空,空为真; -n "string": 判断指定的字符串是否为空,非空为真; 文件测试 存在性测试: -a FILE 存在为真 -e FILE 存在为真 存在性及类型测试: -b FILE 块文件 -c FILE 字符文件 -d FILE 目录 -f FILE 普通文件 -h FILE 符合链接文件 -P FILE 管道文件(大写P) -S FILE 套接字文件(大写S) 文件权限性测试 -r FILE ; -w FILE ;-x FILE ; -U FILE (suid权限) ; -g FILE(sgid权限); -K FILE(sticky权限) 文件是否有内容 -s FILE 时间戳 -N FILE 文件自上一次读后是否被修改过; 从属关系 -O 当前用户是否文件的属主 -G 当前用户是否文件的属组 双目测试 FILE1 -ef FILE2 是否指向相同inode的硬连接 FILE1 -nt FILE2 FILE1是否新于FILE2 FILE1 -ot FILE2 FILE1是否旧于FILE2组合测试条件 逻辑运算 (1) COMMAND1 && COMMAND2 可以这样来使用:相当于if command1 is true then command2, 因为先判断command1,ture才会执行command2 COMMAND1 || COMMAND2 可以这样来使用:相当于else,因为先判断command1,command1是ture的话,就不执行command2了 COMMAND1 ! COMMAND2 (2) EXPRESSION1 -a EXPRESSION2 EXPRESSION1 -0 EXPRESSION2 !EXPRESSION2 注意: 逻辑运算符前后都有空白字符 逻辑运算优先级别 !> -a > -o, 改变级别用括号,括号要用转义字符,前后留空
示例:
logic_script.sh#!/bin/bash#file=/tmp/logic_script.sh [ 6 -lt 7 ] && echo "1" || echo "0" [ "is a good day" =~ "day" ] && echo "1" || echo "0" [ -a $file] && echo "1" || echo "0" [root@localhost tmp]# bash -x logic_script.sh + file=/tmp/logic_scritp.sh ---看||的逻辑,前面为真,后面就不执行了+ '[' 6 -lt 7 ']'+ echo 11+ '[' isagoodday '=~' day ']'logic_script.sh: line 6: [: =~: binary operator expected ---字符串比较要两个中括号[[]]+ echo 0+ '[' -a '/tmp/logic_scritp.sh]'logic_script.sh: line 7: [: missing `]' ---看错误提示,]没有空格隔开,变为missing `]'+ echo 0 修改后: logic_script.sh #!/bin/bash#file=/tmp/logic_script.sh [ 6 -lt 7 ] && echo "1" || echo "0" [[ "isagoodday" =~ "day" ]] && echo "1" || echo "0" [ -a $file ] && echo "1" || echo "0"[root@localhost tmp]# bash -x logic_script.sh + file=/tmp/logic_script.sh+ '[' 6 -lt 7 ']'+ echo 11+ [[ isagoodday =~ day ]]+ echo 11+ '[' -a /tmp/logic_script.sh ']'+ echo 11
变量作用域
环境变量: 当前shell进行及子进程有效 赋值: (1)export var_name=value (2)var_name= value export var_name (3)declare -x var_name=value (4)var_name=value delare -x var_name 注意: bash内嵌了许多环境变量(通常全为大写字母) 查看: export , declare -x , env 本地变量: 当前运行脚本的shell进行的生命周期,对子shell无效 赋值: var_name=value 引用: ${var_name} , $var_name 查看: set 撤销: unset var_name(此处不能用$) 局部变量: 某代码的片段,如函数的上下文,作用在函数的生命周期,函数结束就销毁; 赋值: local var_name=vaule 位置参数变量:当前执行脚本的shell进程传递的参数 使用方式:myscript argue1 argu2 argu3 ... --->执行脚本时直接赋值给参数 引用方式:$1 , $2 ,$3,... 轮替: shift n 把后面第n个参数轮替到第一个参数,n前面的参数都踢掉 特殊变量: $0: 脚本文件名; $#: 脚本参数的个数 $*: 所有参数 $@: 所有参数 --假设在脚本运行时写了三个参数 1、2、3 " * " 等价于 "1 2 3"(传递了一个参数), "@" 等价于 "1" "2" "3"(传递了三个参数) $$: 脚本运行的当前进程ID号; $!: 后台运行的最后一个进程的ID号
例子:sum_scirp.sh #!/bin/bash#declare -i sumecho "the script filename is: $0"echo "the script argu is : $*"echo "the script argu's number is : $#"shift 2 ---- 前连个参数被踢了echo "the script argu is : $*"echo "the script argu's number is : $#"for ((i=1;i<=$#;i++));do ----仿C语言风格的for循环,需要两个括号let sum+=$i; ----$i,i循环的值,怎样取传递参数的值$($i)?doneecho "the sum is $sum" [root@localhost tmp]# bash sum_script.sh 1 2 13 14 15 16 17 18 9the script argu is : 1 2 13 14 15 16 17 18 9the script argu's number is : 9the script argu is : 13 14 15 16 17 18 9 ---- shift 2 的效果the script argu's number is : 7the sum is 28 ---- 28=1+2+3+4+5+6+7 ,这个$i不是取传递参数的值!修改for语句 for i in $*;do echo "$i" let sum+=$i ---- 这个$i是列表里的数据,! done[root@localhost tmp]# bash sum_script.sh 1 2 13 14 15 16 17 18 9the script argu is : 1 2 13 14 15 16 17 18 9the script argu's number is : 9the script argu is : 13 14 15 16 17 18 9the script argu's number is : 71314151617189the sum is 102
变量
参数
脚本
类型
字符
状态
进程
测试
运行
函数
括号
数据
运算
字符型
三个
两个
作用
周期
命令
方式
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
二年级网络安全的手抄报怎么画
战地1刷分服务器
网络安全测试众测平台有哪些
网络安全预警通告
软件开发都是复制粘贴吗
爱国网络安全教育
河北c语言软件开发哪家好
前端要学数据库吗
学校网络安全说明
江苏优质订货软件开发
山东省网络安全新闻
金蝶服务器不在一个局域网
机器人与软件开发
软件开发合同范本版权归属
认证服务器是什么
网络安全认识心得体会50字
大专的网络技术专业学什么
index怎么上传到服务器
软件开发创业需要的人才
西城区技术软件开发介绍
唐河客户管理软件开发
网络安全知识竞赛平台登录
陕西惠中惠网络技术
数据库加密安全软件
幻想神域服务器
入数据库数据格式要求
怎样申请第三方软件开发
开鲁县网络安全宣传
光伏网络技术专业大学
床位分配数据库代码