shell脚本基础知识
虽然现在能在Linux系统下生存,但是自觉效率太低,和高手有很大的差距。
这就是关于Linux的知识太过匮乏,有很多事情知道该怎么做,但是就是没法在Linux下实现,为了提升工作效率,必须要接触Linux高级技巧
Linux的东西比较深,没法一下学完,所以只要能掌握生信必备的基础就好了。
一些主要的流程都是用Perl或Python生成shell脚本来执行的,所以直接看别人生成的shell脚本,能看懂里面每一行语句就好。
1.反引号
echo ==========start at : `date` ==========
所有UNIX命令,要取结果或输出,都要用$( )或反引号` `。参见:shell里的` ` { } expr $(( ))
所以反引号`命令`就等价于命令输出的字符串
2.&&
echo ==========end at : `date` ========== && \
&& 只有前面的每一条命令都顺利执行完(没有报错),才可以执行后面一句。如果没有&&,那每一条命令都是独立的,都会执行完。
同理||,只有在左边的命令返回假,右边的命令才会执行,如果左边的顺利执行,则右边的不执行
lizhixin@login-25-3[22:47:39]:shizhuoxing$ l -bash: l: command not found lizhixin@login-25-3[23:01:38]:shizhuoxing$ l || echo "hello" -bash: l: command not found hello lizhixin@login-25-3[23:02:08]:shizhuoxing$ ls || echo "hello" arrow.sh bin Figure IDRM lottery nifty_svm PacBio ProSplign sparc.sh lizhixin@login-25-3[23:02:21]:shizhuoxing$ l && echo "hello" -bash: l: command not found lizhixin@login-25-3[23:02:38]:shizhuoxing$ ls && echo "hello" arrow.sh bin Figure IDRM lottery nifty_svm PacBio ProSplign sparc.sh hello lizhixin@login-25-3[23:02:45]:shizhuoxing$
3.脚本中的0,1,2
echo Still_waters_run_deep 1>&2 && \
参见:shell 1>&2 2>&1 &>filename重定向的含义和区别
0是标准输入,1是标准输出,2是标准错误
[root@redhat box]# ls a.txt b.txt 1>file.out 2>file.err
执行后,没有任何返回值. 原因是, 返回值都重定向到相应的文件中了,而不再前端显示
[root@redhat box]# ls a.txt b.txt 1>file.out 2>&1
1>&2 正确返回值传递给2输出通道 &2表示2输出通道,如果此处错写成 1>2, 就表示把1输出重定向到文件2中.
& 是一个描述符,如果1或2前不加&,会被当成一个普通文件。
4.source setup.sh
看见很多脚本的第一行都是source setup.sh,这是什么意思呢?
source命令也称为“点命令”,也就是一个点符号(.)。source命令通常用于重新执行刚修改的初始化文件,使之立即生效,而不必注销并重新登录。
还有一个另外一个用途,在对编译系统核心时常常需要输入一长串的命令,可以用source简化。
所以,source setup.sh就是自动的部署了程序运行所需的环境
5.sh.x
sh脚本可以加密成sh.x,参见:shell脚本加密
它的作用是把shell脚本转换为一个可执行的二进制文件,从而达到加密的效果
6.各种符号
7.运算符
文件比较运算符
1 2 3 4 5 6 7 8 9 | -e filename 如果 filename存在,则为真 [ -e /var/log/syslog ] -d filename 如果 filename为目录,则为真 [ -d /tmp/mydir ] -f filename 如果 filename为常规文件,则为真 [ -f /usr/bin/grep ] -L filename 如果 filename为符号链接,则为真 [ -L /usr/bin/grep ] -r filename 如果 filename可读,则为真 [ -r /var/log/syslog ] -w filename 如果 filename可写,则为真 [ -w /var/mytmp .txt ] -x filename 如果 filename可执行,则为真 [ -L /usr/bin/grep ] filename1-nt filename2 如果 filename1比 filename2新,则为真 [ /tmp/install/etc/services -nt /etc/services ] filename1-ot filename2 如果 filename1比 filename2旧,则为真 [ /boot/bzImage -ot arch /i386/boot/bzImage ] |
字符串比较运算符 (请注意引号的使用,这是防止空格扰乱代码的好方法)
1 2 3 4 | -z string 如果 string长度为零,则为真 [ -z "$myvar" ] -n string 如果 string长度非零,则为真 [ -n "$myvar" ] string1= string2 如果 string1与 string2相同,则为真 [ "$myvar" = "one two three" ] string1!= string2 如果 string1与 string2不同,则为真 [ "$myvar" != "one two three" ] |
算术比较运算符
1 2 3 4 5 6 | num1- eq num2 等于 [ 3 - eq $mynum ] num1- ne num2 不等于 [ 3 - ne $mynum ] num1-lt num2 小于 [ 3 -lt $mynum ] num1- le num2 小于或等于 [ 3 - le $mynum ] num1-gt num2 大于 [ 3 -gt $mynum ] num1- ge num2 大于或等于 [ 3 - ge $mynum ] |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)