liunx 下的shell语句 if [ ! -d /$1/$2/$3/ ]是啥意思?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了liunx 下的shell语句 if [ ! -d /$1/$2/$3/ ]是啥意思?相关的知识,希望对你有一定的参考价值。

新人小白,学习liunx的shell中,求指导
特别是那个!,那个是什么意思,还有其他特殊符号吗?
回到的好,我加分

liunx 下的shell语句 if [ ! -d /$1/$2/$3/ ]这是判断某文件夹是否存在,$1, $2, $3都是变量,操作方法如下:

1、判断文件的基本格式。[ 操作符 文件或目录 ]。

2、判断文件是否存在(Exist):-e。

3、判断是否为目录 (Directory):-d。

4、判断是否为文件 (File):-f。

5、判断当前用户是否有权限写入(Write):-w。

6、最后判断当前用户是否有权限执行(Excute):-x。

参考技术A if [ ! -d /$1/$2/$3 ] 这是判断/$1/$2/$3这个文件是否是目录文件。
! 在这里是取反的意思,意思:如果/$1/$2/$3不是目录的话符合条件。
$1 $2 $3 分别是第一个参数,第二个参数,第三个参数
当然如果/$1/$2/$3不存在,自然也不是目录。也是符合条件的。

shell的特殊符号太多。这个还是得看书。
以含有!的特殊符号举例
!$ $! !number !? !! 这些都是,但还不止。
参考技术B 这是判断某文件夹是否存在
$1, $2, $3 都是变量, 这个应该好理解

! 是取反, true 变成false, false变成true
假设 $1, $2, $3 的值分别为 home, me. myfile,

整个语句意思是 如果 文件夹 /home/me/myfile 不存在追问

那还有其他的特殊符号吗?

追答

这个语句里面只有 ! $ 算特殊符号

追问

不是这个语句里哦!就其他的些特殊符号,比较常用的

追答

建议找本 shell编程的书来看, 能够系统入门
这里罗列常用符号
'' "" 引用字串
\ 转义

> < 重定向
| 管道
& 后台运行
; 顺序语句
`` 执行命令并以字符串形式返回结果
() 在子shell里运行命令

* ? [] 文件名匹配用到

常用的就这些吧

本回答被提问者采纳

Shell 中 if 语句的使用

参考技术A Shell 的 if 语法 和 C 语言等高级语言非常相似,唯一需要注意的地方就是 Shell 的 if 语句对 空格 方面的要求比较严格( 其实 Shell 对所有语法的空格使用都比较严格 ),如果在需要空格的地方没有打上空格,都会报错。如: if [ $1 == "ip" ];then echo "abc"; fi 中少了一个空格都会报错。另外 Shell 的 if 语句必须以 fi 作为结尾,不然同样会报错。
有 else 和 elif 时也一样,需要注意空格问题,下面这个例子可以作为参考

介绍完 if 语句的基本语法后,if 还有一个值得我们注意的地方,那就是"对比"。在 C 语言等高级语言中,不管是对比字符串,还是对比整型、浮点数等等数据类型,都是使用 ==、<= 等等对比运算符就可以完成。但是在 Shell 中对比字符串和对比数字,却是要分开两种方式。
对比字符串只能使用 ==、<、>、!=、-z、-n 。对比字符串时,末尾一定要加上 x(或者a、b等)一个字符,因为 if [ 1 是"",这个语句会翻译成 if [ == "ab" ] ,左边相当于没有东西了,会报语法错误。或者使用 [[ ]] ,就不需要 x 了。使用 < 或者 > 时,如果是用 [ ],需要用转义符 "",如 >。
对比数字既能使用 -eq、-ne、-gt、-lt、-le ,也能使用 ==、<、>、!= 。其中 -eq 的意思是 equal,-ne 是 unequal,-gt 是 greater than,-ge 是 greater than or equal to,-lt 是 less than,-le 是 less than or equal to 。

if 在对比时可以使用正则表达式,如: if [[ $1 == a*a ]] (或者 if [ $1x == a*ax) 。如果使用 "" 把 a a 包围起来, 就会变成字符 * ,而不是正则表达式的 *。

区别一:
在 [ 中使用逻辑运算符,需要使用 -a(and)或者 -o(or)。
在 [[ 中使用逻辑运算符,需要使用 && 或者 ||。

区别二:
[ 是 Shell 命令,它包围的表达式是它的命令行参数,所以字符串比较符 > 和 < 需要转义,否则就变成 io 重定向了。
[[ 是 Shell 关键字,不会做命令扩展,所以 < 和 > 不需要进行转义。但是语法相对严格,如在 [ 中可以用引号括起操作符,[[ 则不行。如: if [ "-z" "ab" ] 。

区别三:
[[ 可以做算术扩展,[ 则不行。如:```if [[ 11 + 1 -eq 100 ]]''',而 '''if [ 11 + 1 -eq 100 ]''' 则会报错。

在高级语言中,判断文件是否存在等各种状态都是需要调用特定的函数进行判断。而在 Shell 中,这方面就比较方便些,只需要运算符即可。
常用的文件判断运算符如下:

原文: https://www.cnblogs.com/matthewma/p/6995479.html

以上是关于liunx 下的shell语句 if [ ! -d /$1/$2/$3/ ]是啥意思?的主要内容,如果未能解决你的问题,请参考以下文章

shell中的if语句逻辑错误

linux shell编程 if判断语句的判定条件

Shell 中 if 语句的使用

Shell编程Shell中的流程控制之if语句

Shell if else语句

linux shell的if语句