bash基础
发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,基础知识: 变量: 变量名+指向的内存空间; 变量赋值: var_name=value; 变量类型: 数据存储的格式,表示的数据范围; 字符型,数字
千家信息网最后更新 2026年11月03日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安全错误
数据库的锁怎样保障安全
花魁咖啡
互联网金融科技
华服互联网科技靠谱吗
互联网金融监管科技数据
A股互联网金融科技公司
互联网品科技
互联网公司 科技公司
伴你行互联网科技有限公司
苏州大垚互联网科技
掌上梦互联网科技
居家互联网科技有限公司
互联网公司科技股
青岛科技大学互联网大赛研究生
上海钢联属于互联网科技股吗
互联网科技资金流入
半导体是互联网高科技吗
互联网科技平台产品运营
互联网科技收购价值
悟空问答互联网科技
互联网科技大会大佬
互联网科技官网
互联网科技有限公司图片
奇酷互联网络科技
友谊互联网络科技
深圳天众互联网科技公司
大白互联网科技
互联网科技英文翻译
山东吉时兔互联网科技有限公司
崇明区互联网教育科技售后服务
互联网企业科技类企业如何做账