shell中的判断语法

shell中的判断语法 基本语法1test 条件表达式2注意判断语句两边必须保留一个空格[ 条件表达式 ]3支持正则表达式注意判断语句两边必须保留一个空格 注意:[[ 这个里面只能使用 || 或者 不能使用 -a 和 -o ]][[ 条件表达式 ]]判断结果是真还是假通过 $?来判断如果结果是“0”那就是真如果结果是“1”那就是假文件存在与否判断#文件/目录 是否存在 exist test -e 文件/目录的名字 #另一种写法 [ -e 文件/目录的名字 ]#是否 是普通磁盘文件文本、脚本等目录、软链接不满足 file test -f 文件的名字 #另一种写法 [ -f 文件名 ]#是否是文件夹目录directory test -d 目录的名字 #另一种写法 [ -d 目录名 ]是文件或者目录吗是是普通的文件吗是是一个目录吗不是文件权限判断当前用户对1文件有读取权限吗有当前用户对1文件有写入权限吗有当前用户对1文件有执行权限吗没有两个文件比较新旧test file1 -nt file2 比较file1是否比file2新 test file1 -ot file2 比较file1是否比file2旧 test file1 -ef file2 比较是否为同一个文件或者用于判断硬连接是否指向同一个inode-ntnew than-otold than-efequal file 断两个文件inode 编号完全一致→ 是同一个物理文件硬链接返回真$?0硬链接 (hard link)Linux 磁盘里inode 号文件在磁盘的唯一身份证保存文件大小、权限、磁盘块位置文件名只是 inode 的别名、快捷入口硬链接本质多个不同文件名共用同一个 inode 号# 创建硬链接ln 源文件 硬链接名 ln file1.txt link1.txt此时file1.txt和link1.txtinode 一模一样硬链接特点1删一个文件名文件本体还在inode 引用计数 - 1计数 0 时数据不丢失# 只删文件名link1还能正常读取内容 rm file1.txt2,不能跨分区 / 跨磁盘创建不同磁盘 inode 编号独立无法共用 inode3,不能对目录创建硬链接系统保护防止目录循环死链硬链接同一个实体多个名字删名字不删数据软链接快捷方式存路径删源文件快捷方式作废大小比较符号在 Shell 中-eq、-ne、-gt、-lt、-ge和-le用于数值比较。它们常用于测试两个数字是否相等、不等、大小关系等-eq (equal)相等 -ne (not euqal)不等 -gt (greater than)大于 -lt (litter than)小于 -ge (greater equal)大于等于 -le (litter equal)小于等于字符串之间的判断-z (zero)是否为空字符串 字符串长度为0就成立 -n (not zero)是否为非空字符串 只要字符串非空就是成立 变量 变量2 是否相等 变量1 ! 变量2 是否不等-eq和号的区别-eqequal整数专用比较符只认数字没有英文缩写就是字符串全等符号read实现脚本交互式录入从键盘接收用户输入把输入内容存入变量实现脚本交互式录入-p 提示信息-p 提示文字 变量名功能输入前打印提示语句不用额外echoprompt提示、提示信息# 终端输出我是 用户输入lulu → namelulu read -p 我是 name-r 原始读取-r变量功能禁止反斜杠\转义原样保留输入的\raw原始读取#手动输入\a\b\c read -r a \a\b\c#不加-r read a \a\b-s静默模式silent静默密码隐藏输入作用敲键盘打字屏幕完全不显示任何字符专门用来输密码、密钥防止旁边人偷看。#-s -p 组合最常用 read -s -p 请输入密码 pwd-p打印提示文字请输入密码-s输入全程隐藏看不见密码输完回车密码存进变量pwd逻辑判断符号-a 和 (and 逻辑与) 两个条件同时满足整个大条件为真 -o 和 || (or 逻辑或) 两个条件满足任意一个整个大条件为真 或者 || 有短路效应逻辑与并且前命令成功返回0才执行后面命令||逻辑或或者前命令失败返回非 0才执行后面命令短路效应只要左边就能确定整体结果右边代码直接不执行跳过短路规则全真才真一假全假||短路规则一真全真全假才假命令1 命令2命令1 || 命令2如果命令 1 执行失败$?≠0直接短路命令 2 不运行左边已经错了整体必然错没必要跑右边只有命令 1 成功$?0才继续跑命令 2如果命令 1 执行成功$?0直接短路命令 2 不运行左边已经成功整体结果一定成立跳过右边只有命令 1 失败$?≠0才执行命令 2注意如果想一个中括号搞定多个条件判断那么使用-a/-o如果想多个中括号搞定多个条件判断那么使用 / ||-aand→ 逻辑与并且两个条件全都成立才为真-oor→ 逻辑或或者任意一个成立就为真[ 条件1 -a 条件2 ] [ 条件1 -o 条件2 ]#案例-eq (equal等于) -ne (not equal 不等于) [ 1 -eq 1 -a 1 -ne 0 ]普通命令$? 程序执行是否报错[]判断命令$? 条件逻辑是否成立⚠️禁忌单[]括号里面不能直接写 /||会语法报错 ||放在两个中括号的外侧用来连接两个独立判断✅同括号里用-a/-o括号之间用/||