参考:生信技能树
if条件语句
if 条件语句的常见条件:数值判断、字符串判断、文件判断
1。数值判断 :
注意:中括号 内部有空格
判断1是否等于2
if [ 1 -eq 2 ] > then> echo 1=2> else> echo 1!=2> fi #输完fi后,空格后回车,即运行
判断一下,判断上一句命令是否成功,成功就创建一个ok.txt文件
if [ $? -eq 0 ]> then> touch ok.txt> else> touch false.txt> fi
状态变量$? echo $?返回0 说明上一个命令运行成功
-eq 判断是否等于
查看是否生成了ok.txt文件,确实有
2。文件判断
判断ok.txt是否存在 -f ok.txt
if [ -f ok.txt ]> then> echo '存在'> else> echo '不存在'> fi
3。字符串判断
for条件语句
done结尾
for i in 1 2 3 4 5> do> echo ${i} "欢迎你哦"> done
批量创建/删除10个文件 file1, file2, ... file10
1到10 简写为1..10
for i in {1..10}> do> touch file${i}# rm file${i}> done
可以把循环内容,先赋值
list="CDS exon gene start_codon stop_codon"for i in ${list}> do> echo "这是什么,这是 ${i}"> done
可以ls来循环
先创建10个file
touch file{1..10}
ls查看
查看file开头文件
ls file*
批量重命名文件
`ls file*` 反引号
for i in `ls file*`> do > mv ${i} ${i}.txt> done
mv ${i} 当i=1时,就是file1,
mv ${i} ${i}.txt 就是把file1命名成file1.txt
批量删除file开头文件
rm file*
while循环
同样先创建10个file文件
while循环重命名
ls file* | while read x # x是自定义变量 > do> mv ${x} ${x}.txt > done
查看readme.txt文件
cat readme.txt
cat readme.txt | while read x> do> echo 1 ${x}> done
这里${x}循环,当x=1,就是readme.txt的第一行内容,内容循环
练习
1。软件安装与环境变量:请安装一个二进制软件 bowtie2,包括下载、解压、调用 bowtie2 命令的帮助文档,修改环境变量 PATH。
不需要下载这个软件,因为服务器上已经有了,拷贝一份即可 /home/hcguo/tmp/biosoft/bowtie2-2.3.4.3-linux-x86_64.zip
第一步把这个软件(目录已给)拷贝到 当前目录./
cp /home/hcguo/tmp/biosoft/bowtie2-2.3.4.3-linux-x86_64.zip ./
ls查看确实有了这个zip安装包
unzip解压
unzip bowtie2-2.3.4.3-linux-x86_64.zip
查看一下
ls bowtie2-2.3.4.3-linux-x86_64
可以看到里面东西
pwd查看此时目录
复制这个目录下面有用
我们这里 添加环境变量
echo 'export PATH="/trainee/Aug9/bowtie2-2.3.4.3-linux-x86_64:$PATH"' >> ~/.bashrc
激活一下
source ~/.bashrc #重新激活,才生效
查看帮助文档
bowtie2 --help
说明安装成功!
2。if 语句与状态参数:在上一题修改好了环境变量之后,回到家目录,再次调用 bowtie2 命令的帮助文档,然后使用 if 语句判断是否调用成功(提示:状态参数变量),如果成功,输出:yes ,否则输出 no
状态变量$? echo $?返回0 说明上一个命令运行成功
-eq 判断是否等于
if [ $? -eq 0 ]> then> echo yes> else> echo no> fi
3。if 语句与自定义变量:
创建文件 file1
然后判断当前目录下是否有 file1 这个文件
如果是,输出:yes ;否则什么都不做
判断file1是否存在 -f file1
touch file1 #创建文件
if [ -f file1 ]> then > echo yes> else> echo no> fi
参数扩展:掐头去尾
赋值一串字符
adhfowe.adfhwe.ahfwo23
id=adhfowe.adfhwe.ahfwo23
掐头:一个#号,去最短
echo ${id#*hf}
{id#*hf}
*是通配符,把前面hf出现最短的部分
掐头:两个##号,去最长
echo ${id##*hf}
删掉了hf出现最长的部分
去尾:一个%, 去最短的尾
echo ${id%hf*}
去尾:两个%%, 去最长的尾
echo ${id%%hf*}
把ad全部替换成AD
echo ${id//ad/AD}
如果只替换第一处就是,一个/
echo ${id//ad/AD}
4。创建 10 个文件 test_file_1 ~ test_file_10 ,使用循环语句(建议用 while read id),将上面的 test_file_1 ~ test_file_10 进行重命名,如:test_file_1 改为 test_1
创建10个文件
touch test_file_{1..10}
ls查看
ls test_file*
while批量替换
ls test_file* | while read id; do mv ${id} ${id//file_/}; done
-------------------------
变量索引
赋值一个字符串
id=Data.tar.gz
展示多少字符
echo ${#id}
有11个字符
linux索引是从0开始的
从第3位到最后一位 {id:3}
echo ${id:3}
从3开始,后面一共取5位 {id:3:5}
echo ${id:3:5}
从第3位,取到倒数第二位:{id:3:-1}
echo ${id:3:-1}