前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Linux 脚本-echo for while if

Linux 脚本-echo for while if

原创
作者头像
用户10412487
发布2023-04-04 20:22:11
5.3K0
发布2023-04-04 20:22:11
举报
文章被收录于专栏:生信技能树-R生信技能树-R

linux 系统环境

文件系统结构
文件系统结构
代码语言:txt
复制
lscpu #查看服务器信息 pic1
pic 1
pic 1
代码语言:txt
复制
free -h #查看内存 pic2
pic 2
pic 2
代码语言:txt
复制
df -h #查看硬盘信息 pic3
pic 3
pic 3
代码语言:txt
复制
du -h -d 1 pic4
Mar402 15:45:28 ~
$ du -sh ~ #显示文件大小的总数
4.0G    /trainee/Mar402
pic4
pic4
代码语言:txt
复制
top # 查看系统进程与任务 pic5 (q退出)
htop #是top的高级版 自己的服务区用conda安装 pic6
pic5
pic5
pic6
pic6
代码语言:txt
复制
ps -ef #pic7
pic 7
pic 7

Linux 系统环境查看 总和 pic8

pic 8
pic 8

变量

变量:环境变量、状态变量、位置参数变量、自定义变量,

调用变量时,要在变量前面加一个 $ 符号

? 环境变量:用于存储有关shell会话和工作环境的系统变量 ? 状态变量:用于记录命令的运行结果

? 位置参数变量:用于向命令或程序脚本中传递信息

? 自定义变量:由用户自行定义的变量,可用于用户编写的脚本,多个命令间的值传递等

自定义变量

自定义变量:由用户自行定义的变量,可用于用户编写的脚本,多个命令间的值传递等(注:= 前后不要有空格)

代码语言:txt
复制
Mar402 16:15:45 ~
$ a=gene
Mar402 16:25:21 ~
$ echo 1234
1234
Mar402 16:25:30 ~
$ echo
Mar402 16:25:32 ~
$ echo $a
gene
Mar402 16:25:44 ~
$ echo 'This is a $a' #单引号里变量不会被解释
This is a $a
Mar402 16:27:05 ~
$ echo "This is a $a" #双引号里 变量会被解释,$a原本被赋予的值(gene)
This is a gene

环境变量

环境变量:用于存储有关shell会话和工作环境的系统变量

常见环境变量:

? $HOME:当前用户的主目录

? $PATH:shell查找命令的目录列表,由冒号(:)分隔。

? $SHELL:bash shell的全路径名

? $LOGNAME:当前用户的登录名

? $PS1:shell命令行界面的主提示符

代码语言:txt
复制
Mar402 16:27:29 ~
$ ls  # 为什么输入ls就有内容,它需要满足环境变量的三个条件 pic9
bget                             file3                          Miniconda3-latest-Linux-x86_64.sh  tmp2
bget_0.3.2_Darwin_64-bit.tar.gz  gi                             mydir                              tmp2.fa
bin                              hisat2-2.1.0                   README.md                          tmp.fa
catfile                          hisat2-2.1.0-Linux_x86_64.zip  readme.txt                         Trimmomatic-0.39
Data                             LICENSE                        RNA.env.txt                        Trimmomatic-0.39.zip
file                             md5                            samtools-1.14
file2                            miniconda3                     tmp1
Mar402 16:34:02 ~
$ which ls       #条件1 ls真实存在于这个服务器上,在bin下面
/bin/ls
Mar402 16:34:10 ~
$  ll /bin/ls     #条件2 有可执行权限
-rwxr-xr-x 1 root root 133792 Jan 18  2018 /bin/ls*
Mar402 16:36:14 ~
$ echo $PATH | tr ':' '\n'  #条件3 存在的路径在PATH这个变量中
/trainee/Mar402/bin
~/bin
/trainee/Mar402/miniconda3/condabin
/usr/local/sbin
/usr/local/bin
/usr/sbin
/usr/bin
/sbin
/bin
/usr/games
/usr/local/games
/snap/bin
-----满足上面三个条件才可调用(全局调用脚本)-----
pic9
pic9

改变权限

代码语言:txt
复制
-rw-rw-r--   1 Mar402 Mar402    33 Mar 27 15:55 file3
ar402 16:55:53 ~
$ chmod u+x file3 #ch(change) u(用户者) +文件名
Mar402 16:56:38 ~
$ ll file3
-rwxrw-r-- 1 Mar402 Mar402 33 Mar 27 15:55 file3*
Mar402 16:56:48 ~
$ chmod 777 file3 #开到最大权限
Mar402 17:36:44 ~
$ ll file3
-rwxrwxrwx 1 Mar402 Mar402 33 Mar 27 15:55 file3*
#删除权限用 “-”号 pic10
pic10
pic10

状态变量

状态变量
状态变量
代码语言:txt
复制
Mar402 17:36:53 ~
$ echo $?  #$?上一个命令是否执行成功 0 为成功,非零则是出错了
0

未知参数变量 pic11

pic 11
pic 11

结构化语句

if 条件语句常见的格式 pic12

pic 12
pic 12

if 语句数值判断 pic13

pic13
pic13
代码语言:txt
复制
Mar402 18:10:14 ~
$ if [ 1 -eq 1 ]  #[] 里要打空格 1-eq1可以连着写
> then
> echo "ok"
> else
> echo "???"
> fi
ok

if 字符串判断 pic12

pic 12
pic 12

例子见ppt

if 文件判断 pic 13

pic 13
pic 13

for循环 结构 pic14

代码语言:txt
复制
Mar402 18:10:51 ~
$ for i in 1 2 3 4 5
> do
> echo ${i} 'hi'
> sleep 3s #中间暂停3秒在输出下一个
> done
1 hi
2 hi
3 hi
4 hi
5 hi
pic 14
pic 14
代码语言:txt
复制
(base) Mar402 19:06:15 ~
$ for i in ${list}
> do
> echo "This is a ${i}"
> done
This is a CDS
This is a exon
This is a gene
代码语言:txt
复制
(base) Mar402 19:07:00 ~
$ for i in {1..5}
> do
> touch file${i}
> done
(base) Mar402 19:18:14 ~
$ ls file*
file  file1  file2  file3  file4  file5
(base) Mar402 19:18:38 ~
$ for i in `ls file*`
> do
> mv ${i} ${i}.txt
> done
(base) Mar402 19:19:40 ~
$ ls file*
file1.txt  file2.txt  file3.txt  file4.txt  file5.txt  file.txt

while 循环

代码语言:txt
复制
(base) Mar402 19:19:40 ~
$ ls file*
file1.txt  file2.txt  file3.txt  file4.txt  file5.txt  file.txt
(base) Mar402 19:19:47 ~
$ ls file* | while read id
> do
> mv ${id} ${id}.txt
> done
(base) Mar402 19:23:02 ~
$ ls file*
file1.txt.txt  file2.txt.txt  file3.txt.txt  file4.txt.txt  file5.txt.txt  file.txt.txt

(base) Mar402 19:26:35 ~
$ cat config
file1.txt.txt
file2.txt.txt
file3.txt.txt
file4.txt.txt
file5.txt.txt
file.txt.txt
(base) Mar402 19:26:45 ~
$ cat config | while read id
> do
> mv ${id} ${id%.txt} #加了个%删掉一个txt
> done
(base) Mar402 19:28:15 ~
$ ls file*
file1.txt  file2.txt  file3.txt  file4.txt  file5.txt  file.txt

结构化语句—参数扩展掐头去尾(改变文件格式) pic15

pic 15
pic 15

例子 pic 16

pic 16
pic 16
代码语言:txt
复制
(base) Mar402 19:28:50 ~
$ id=example.txt.fa
(base) Mar402 19:33:09 ~
$ echo ${id}
example.txt.fa
(base) Mar402 19:33:16 ~
$ echo ${id#*.}
txt.fa
(base) Mar402 19:33:43 ~
$ echo ${id#*e}
xample.txt.fa
(base) Mar402 19:34:44 ~
$ echo ${id##*.}
fa

转换文件格式

代码语言:txt
复制
(base) Mar402 19:34:53 ~
$ echo ${id%.*}
example.txt
(base) Mar402 19:35:57 ~
$ echo ${id%%.*}
example
(base) Mar402 19:36:19 ~ #从尾巴开始去,再添加
$ echo ${id%.*}.fq
example.txt.fq

参数扩展 替换 (格式替换) pic17

pic17
pic17
pic17-2
pic17-2
代码语言:txt
复制
(base) Mar402 19:42:18 ~
$ echo ${id/fa/fq}
example.txt.fq
代码语言:txt
复制
#查询有多少个字符
(base) Mar402 19:42:43 ~
$ echo ${#id}
14
(base) Mar402 19:46:53 ~
$ echo ${id:3} $Linux是从0开始,从第4个字符取到最后
mple.txt.fa
(base) Mar402 19:48:31 ~
$ echo ${id:3:5} #从第4个字符开始往后取5个字符
mple.
(base) Mar402 19:48:38 ~
$ echo ${id:3:-1}
mple.txt.f
练习
练习
代码语言:txt
复制
(base) Mar402 19:50:06 ~
$ for i in {1..10}
> do
> touch SRR12345${i}.fastq
> done
(base) Mar402 19:59:02 ~
$ ls *fastq
SRR1234510.fastq  SRR123453.fastq  SRR123456.fastq  SRR123459.fastq
SRR123451.fastq   SRR123454.fastq  SRR123457.fastq
SRR123452.fastq   SRR123455.fastq  SRR123458.fastq
(base) Mar402 20:00:28 ~
$ ls *fastq | while read id; do echo "fq2fa.sh ${id} > ${id%.*}.fasta"; done
fq2fa.sh SRR1234510.fastq > SRR1234510.fasta
fq2fa.sh SRR123451.fastq > SRR123451.fasta
fq2fa.sh SRR123452.fastq > SRR123452.fasta
fq2fa.sh SRR123453.fastq > SRR123453.fasta
fq2fa.sh SRR123454.fastq > SRR123454.fasta
fq2fa.sh SRR123455.fastq > SRR123455.fasta
fq2fa.sh SRR123456.fastq > SRR123456.fasta
fq2fa.sh SRR123457.fastq > SRR123457.fasta
fq2fa.sh SRR123458.fastq > SRR123458.fasta
fq2fa.sh SRR123459.fastq > SRR123459.fasta
# 方法二替换
(base) Mar402 20:07:35 ~
$ ls *fastq | while read id; do echo "fq3fa.sh ${id} > ${id/fastq/fasta}"; done
fq3fa.sh SRR1234510.fastq > SRR1234510.fasta
fq3fa.sh SRR123451.fastq > SRR123451.fasta
fq3fa.sh SRR123452.fastq > SRR123452.fasta
fq3fa.sh SRR123453.fastq > SRR123453.fasta
fq3fa.sh SRR123454.fastq > SRR123454.fasta
fq3fa.sh SRR123455.fastq > SRR123455.fasta
fq3fa.sh SRR123456.fastq > SRR123456.fasta
fq3fa.sh SRR123457.fastq > SRR123457.fasta
fq3fa.sh SRR123458.fastq > SRR123458.fasta
fq3fa.sh SRR123459.fastq > SRR123459.fasta
代码语言:txt
复制
(base) Mar402 20:08:22 ~
$ id=example
(base) Mar402 20:09:29 ~
$ fastqc ~/Data/${id}.fq
null
Started analysis of example.fq
Approx 100% complete for example.fq
Analysis complete for example.fq
(base) Mar402 20:10:58 ~
$ if [ $? -eq 0 ]
> then 
> echo "yes!"
> else
> echo "no"
> fi
yes!

(base) Mar402 20:15:42 ~
$ for i in {1..10}
> do
> touch file${i}
> done
(base) Mar402 20:16:16 ~
$ ls file*
file1  file10  file2  file3  file4  file5  file6  file7  file8  file9

(base) Mar402 20:19:01 ~
$ ls file*
file1  file10  file2  file3  file4  file5  file6  file7  file8  file9
(base) Mar402 20:19:18 ~
$ ls file* | while read id
> do
> echo "hi!" > ${id}
> done
(base) Mar402 20:20:06 ~
$ ll -thr file*
-rw-rw-r-- 1 Mar402 Mar402 4 Apr  4 20:20 file8
-rw-rw-r-- 1 Mar402 Mar402 4 Apr  4 20:20 file7
-rw-rw-r-- 1 Mar402 Mar402 4 Apr  4 20:20 file6
-rw-rw-r-- 1 Mar402 Mar402 4 Apr  4 20:20 file5
-rw-rw-r-- 1 Mar402 Mar402 4 Apr  4 20:20 file4
-rw-rw-r-- 1 Mar402 Mar402 4 Apr  4 20:20 file3
-rw-rw-r-- 1 Mar402 Mar402 4 Apr  4 20:20 file2
-rw-rw-r-- 1 Mar402 Mar402 4 Apr  4 20:20 file10
-rw-rw-r-- 1 Mar402 Mar402 4 Apr  4 20:20 file1
-rw-rw-r-- 1 Mar402 Mar402 4 Apr  4 20:20 file9
(base) Mar402 20:20:28 ~
$ cat file10
hi!

---来自生信技能树---

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
作者已关闭评论
0 条评论
热度
最新
推荐阅读
目录
  • linux 系统环境
  • Linux 系统环境查看 总和 pic8
  • 变量
    • 自定义变量
    • 环境变量
      • 改变权限
      • 状态变量
      • 未知参数变量 pic11
      • 结构化语句
      • if 字符串判断 pic12
      • if 文件判断 pic 13
      • for循环 结构 pic14
      • while 循环
      • 结构化语句—参数扩展掐头去尾(改变文件格式) pic15
        • 转换文件格式
        • 参数扩展 替换 (格式替换) pic17
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
        http://www.vxiaotou.com