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--[::]:shizhuoxing$ l
-bash: l: command not found
lizhixin@login--[::]:shizhuoxing$ l || echo "hello"
-bash: l: command not found
hello
lizhixin@login--[::]:shizhuoxing$ ls || echo "hello"
arrow.sh bin Figure IDRM lottery nifty_svm PacBio ProSplign sparc.sh
lizhixin@login--[::]:shizhuoxing$ l && echo "hello"
-bash: l: command not found
lizhixin@login--[::]:shizhuoxing$ ls && echo "hello"
arrow.sh bin Figure IDRM lottery nifty_svm PacBio ProSplign sparc.sh
hello
lizhixin@login--[::]:shizhuoxing$
3.脚本中的0,1,2
echo Still_waters_run_deep >& && \
参见:shell 1>&2 2>&1 &>filename重定向的含义和区别
0是标准输入,1是标准输出,2是标准错误
[root@redhat box]# ls a.txt b.txt >file.out >file.err
执行后,没有任何返回值. 原因是, 返回值都重定向到相应的文件中了,而不再前端显示
[root@redhat box]# ls a.txt b.txt >file.out >&
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.运算符
文件比较运算符
-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 ]
字符串比较运算符 (请注意引号的使用,这是防止空格扰乱代码的好方法)
-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" ]
算术比较运算符
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 ]
shell脚本基础知识的更多相关文章
- 什么是Shell?Shell脚本基础知识详细介绍
这篇文章主要介绍了什么是Shell?Shell脚本基础知识介绍,本文是一篇Shell脚本入门文章,在本文你可学到什么是Shell.有多少种Shell.一个Shell脚本代码实例,需要的朋友可以参考下 ...
- shell脚本基础知识以及变量
一.基础知识 1.shell脚本的格式注意事项 第一行(一般必须写明):指定脚本使用的shell(若不写明也不影响脚本的执行,系统会自动以sh解析脚本)."#!/bin/bash" ...
- shell 脚本基础知识详细介绍(二)
SimonSu 博客 评论墙 读者墙 链接 关于 linux中的sh脚本语法 玩linux都知道sh脚本的方便,但如何编写sh脚本却是像我这样的新手和菜鸟的难题.能不能编写得出来是一回事,了不了解又是 ...
- Shell脚本基础知识详细介绍(一)
Shell本身是一个用C语言编写的程序,它是用户使用Linux的桥梁.Shell既是一种命令语言,又是一种程序设计语言.作为命令语言,它交互式地解释和执行用户输入的命令:作为程序设计语言,它定义了各种 ...
- shell脚本—基础知识,变量
shell脚本本质: 编译型语言 解释型语言 shell编程基本过程 1.建立shell文件 2.赋予shell文件执行权限,使用chmod命令修改权限 3.执行shell文件 shell变量: sh ...
- Linux运维之shell脚本基础知识
1.bash中的算术运算 let运算符 [root@:vg_adn_tidbCkhsTest ~/tidb-bench/sysbench]#echo $i [root@:vg_adn_tidbCkhs ...
- bash shell笔记1 脚本基础知识
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://twentyfour.blog.51cto.com/945260/505644 * ...
- Linux shell脚本基础学习详细介绍(完整版)二
详细介绍Linux shell脚本基础学习(五) Linux shell脚本基础前面我们在介绍Linux shell脚本的控制流程时,还有一部分内容没讲就是有关here document的内容这里继续 ...
- 详细介绍Linux shell脚本基础学习
Linux shell脚本基础学习这里我们先来第一讲,介绍shell的语法基础,开头.注释.变量和 环境变量,向大家做一个基础的介绍,虽然不涉及具体东西,但是打好基础是以后学习轻松地前提.1. Lin ...
随机推荐
- JS中innerHTML 和innerText和value的区别
(1)innerHTML 和innerText和value的区别: innerHTML innerText是对非表单元素进行操作的. value是对表单元素进行操作的. (2)innerHTML 和i ...
- [webkit移动开发笔记]之如何去除android上a标签产生的边框
去年年底,做完最后一个项目就可以开开心心回家,可是在测试阶段,发现了不少bug,为了不影响回家时间,加班加点也要解决这些问题,这里算是工作回忆,也算是工作的一点小总结. 在ios4+和android2 ...
- OS: 剪裁UIImage部分不规则区域
首先,我们需要把图片展示在界面上.很简单的操作,唯一需要注意的是由于CGContextDrawImage会使用Quartz内以左下角为(0,0)点的坐标系,所以需要使用CGContextTransla ...
- web错误
“/Web”应用程序中的服务器错误. 服务器 'LD-PC' 上的 MSDTC 不可用. 说明: 执行当前 Web 请求期间,出现未经处理的异常.请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误 ...
- sql 第 10条 到20条
sql 第 10条 到20条 select * from( select *,ROW_NUMBER () over (order by @@servername) as rownum from tb_ ...
- 【Java】JDBC连接MySQL
JDBC连接MySQL 虽然在项目中通常用ORM的框架实现持久化.但经常因测试某些技术的需要,要写一个完整的JDBC查询数据库.写一个在这儿备份. 首先引入驱动包: <dependencies& ...
- 修复跨站攻击 php
在公用文件中加入如下代码 <?php /*云体检通用漏洞防护补丁v1.1 更新时间:2013-05-25 功能说明:防护XSS,SQL,代码执行,文件包含等多种高危漏洞 */ $url_arr= ...
- 一个js搜索功能的实现
这次的重点就在于一个兼容性的问题.就是innerText(微软ie)和textContent(火狐)的知识点,兼容性永远都是伤啊 <!DOCTYPE html PUBLIC "-//W ...
- CVE-2015-7547
危险漏洞补丁修复通知 漏洞编号 漏洞编号为CVE-2015-7547 漏洞说明: Google安全团队近日发现glibc存在的溢出漏洞. glibc的DNS客户端解析器中存在基于栈的缓冲区溢出漏洞.当 ...
- JAVA查找--[二分查找]
package com.array; public class BinaryFind { /* * 项目名称:二分查找 ; * 项目要求:用JAVA对数组进行查找,并运用快速查找算法; * 作者:Se ...