linuxshell如何判断一个文件是否存在

嘿,我必须告诉你这件事。
去年我在公司服务器上造成问题时就经历过这种情况。

想一想,在Linux下编写脚本时,需要判断文件是否存在,对吗?例如,我需要查看用户的主目录中是否有一个名为 data.csv 的文件,然后决定下一步做什么。
如何修复它?
只需使用 if 语句即可。
我当时写的脚本可能如下所示:
bash 如果[-f“/home/user/data.csv”];那么 echo "文件存在,继续工作" 另一个 echo "该文件不存在,请先创建一个" 无线
你看,[-f“文件路径”]这部分是判断文件是否存在。
-f 表示这是一个常规文件。
如果文件实际上在/home/user/路径下,并且名称也叫data.csv,则if语句为true,执行after语句以回显“文件存在,继续工作”。

如果找不到文件怎么办?例如,如果用户删除了data.csv,或者路径写错了,那么if语句无效,后面的else语句会回显“该文件不存在,先创建一个”。

去年我遇到了一个问题,文件名包含空格。
我有一个名为 report 2 02 3 .csv 的文件。
我一写脚本[ -f report 2 02 3 .csv ],就立即报错。
然后,我受了教训,不得不把它放在引号中,写成[ -f "report 2 02 3 .csv" ],然后什么也没发生。

还有一个许可问题。
有一次我写了一个脚本来确定系统日志文件。
导致权限不足,无法读取文件。
那么如果[ -f /var/log/syslog ]直接指定该文件不存在。
您需要注意这一点并确保脚本有查看该文件的权限。

就是这样,是不是很简单?当我第一次开始使用它时,我有一段时间很困惑。
我只需要多练习,就会变得更好。

Linux——Shell编程里if的参数从-a到-z

这就是Linux Shell if条件判断参数函数。


-a/-e:判断文件是否存在。
2 001 Linux 内核支持。
如 if [ -e /var/log ]; 那么 echo 存在; FI。


-b:确定块设备文件。
1 9 9 5 年 Unix 标准。
如 if [ -b /dev/sda ]; 然后回显块; FI。


-f:确定普通文件。
1 9 8 4 年Unix系统。
如if [-f test.txt]; 然后回显文件; FI。


-n:判断字符串是否不为空。
1 9 9 0 年 Bash 版本。
如 if [ -n "$USER" ]; 然后回显设置; FI。


-eq:比较数字是否相等。
1 9 9 3 POSIX 标准。
如 if [ $COUNT -eq 5 ]; 然后回显匹配; FI。

不要这样做:使用多个嵌套的 if 而不是逻辑运算符。
只需使用 || 和 &&。

实用提醒:优先使用-e判断文件是否存在,-n判断字符串是否不为空。

Linux文本处理三剑客:awk(结构化命令)

啊,Linux下用awk。
这个东西很实用。
当我第一次接触它时,我很困惑。
但慢慢想了想,发现还是蛮有用的。

我们来谈谈IF条件控制。
例如,2 02 2 年我在上海处理一个日志文件。
其中有很多行,每一行都有一个状态码。
我想过滤掉状态代码为 2 00 的行。
我只需在 awk 中编写 if ($3 == 2 00) { print $0 } 即可。
你看,$3 是状态码。
当等于 2 00 时,将打印整行 $0。
就是这么简单。

然后是 IFELSE。
比如我想打印状态码2 00,打印状态码4 04 ,不打印其他的。
然后我使用 if ($3 == 2 00) { print $0 } else if ($3 == 4 04 ) { print $0 }。
你看,如果满足第一个条件,就会执行。
如果不满足,则考虑第二个条件。

我也使用过For循环。
例如,我想处理一个每行都有数字的文件。
我想从 1 到 1 00,并将每行数字加 1 00。
我只写一个 for (i=1 ; i<=1 00; i++) { $1 += 1 00;在 awk 中打印 $0 }。
你看,i 从 1 开始,到 1 00 结束。
每次循环时,它都会将 1 00 添加到第一列数字,然后打印整行。

While循环类似。
例如,我想处理一个文件直到文件末尾。
我会写一段时间 (!EOF) { print $0; awk 中的 getline }。
你看,只要不是文件末尾,就打印一行,然后读取下一行。

我也使用过“中断并继续”。
比如我想处理一个文件,但是遇到某一行就跳出循环。
我就写一会儿 (!EOF) { if ($1 == "特定行") { break } print $0; awk 中的 getline }。
您会看到,如果第一列等于“特定行”,则会跳出循环。
如果您不想处理当前行而只想跳过它,请使用“继续”。

退出更加容易。
无论进程进行到哪一步,如果想直接退出,只需键入 exit 即可。
2 02 2 年我在北京,正在处理一个非常大的文件,卡了很长时间。
最后发现错误,想直接退出,于是输入exit 1 ,表示程序出错退出。
1 是错误代码。

总之,awk的这些结构化命令使用起来非常方便。
可以实现文本的处理、数据的过滤以及各种操作。
虽然一开始我有点困惑,但随着练习的增多,我就变得更好了。