Linux 之shell脚本编程

01 Linux 系统环境

文件系统结构

Linux 之shell脚本编程_第1张图片

/ 虚拟目录的根目录。通常不会在这里存储文件

/bin 二进制目录,存放许多用户级的GNU工具

/boot 启动目录,存放启动文件

/dev 设备目录,Linux在这里创建设备节点

/etc 系统配置文件目录

/home 主目录,Linux在这里创建用户目录

/lib 库目录,存放系统和应用程序的库文件

/media 媒体目录,可移动媒体设备的常用挂载点

/root root用户的主目录

/sbin 系统二进制目录,存放许多GNU管理员级工具

/run 运行目录,存放系统运作时的运行时数据

/tmp 临时目录,可以在该目录中创建和删除临时工作文件

/usr 用户二进制目录,大量用户级的GNU工具和数据文件都存储在这里

Linux 之shell脚本编程_第2张图片
• 查看CPU信息:lscpu
• 查看内存信息:free -h
• 查看硬盘信息:df -h
• 查看文件大小:du -h -d 1
• 查看文件大小:du -sh ~

• 查看系统进程:
top 
htop   动态查看,看所有用户; htop -u June16【即自己的登录名】,看自己在运行的命令
ps -ef | grep "$LOGNAME"  该命令执行瞬间在进行的命令

变量

环境变量、状态变量、位置参数变量、自定义变量,调用变量时,要在变量前面加一个 $ 符号

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

常见环境变量:

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

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

Linux 之shell脚本编程_第3张图片

• $SHELL:bash shell的全路径名

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

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

Linux 之shell脚本编程_第4张图片

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

Linux 之shell脚本编程_第5张图片

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

Linux 之shell脚本编程_第6张图片

• 自定义变量

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

Linux 之shell脚本编程_第7张图片

03 结构化语句

• 条件语句 if

常见格式

Linux 之shell脚本编程_第8张图片

常见条件:数值、字符串、文件判断

数值判断

Linux 之shell脚本编程_第9张图片

Linux 之shell脚本编程_第10张图片

if [ $? -eq 0 ] ##前后要有空格
  then
touch ok.txt
fi

字符串判断

Linux 之shell脚本编程_第11张图片

文件判断

Linux 之shell脚本编程_第12张图片

• 循环语句 for 和 while

for

常见格式

Linux 之shell脚本编程_第13张图片
for i in {1..10}
do
touch file${i} ##为了不出问题,可以变量都加上{}
done
Linux 之shell脚本编程_第14张图片

!!!!!

Linux 之shell脚本编程_第15张图片

Linux 之shell脚本编程_第16张图片

不按shift时直接按~键即可打出反引号

while

常见格式

Linux 之shell脚本编程_第17张图片

Linux 之shell脚本编程_第18张图片

Linux 之shell脚本编程_第19张图片

• 参数扩展

Linux 之shell脚本编程_第20张图片
Linux 之shell脚本编程_第21张图片
Linux 之shell脚本编程_第22张图片
Linux 之shell脚本编程_第23张图片

索引位置从0开始

练习

1.生成SRR1234501.sra到SRR1234510.sra这10个id

2.将结尾的.sra替换成.fastq

for i in {01..10}
do
echo SRR12345{i}.sra >> config
done

cat config | while read id
do
echo ${id%.sra}.fastq
done

cat config | while read id
do
echo ${id//sra/fastq}
done

两个>>,否则不行

Linux 之shell脚本编程_第24张图片

生成文件时sra前多了一个空格,while循环中没有空格→替换失败

04 Shell 脚本编程

• Shell 脚本

保存脚本

Linux 之shell脚本编程_第25张图片
Linux 之shell脚本编程_第26张图片
写三句命令,两句正确一句错误
vim test.sh
#!bin/bash
pwd
pwd
ppp

1.不进行重定向,结果直接输出到标准输出流(屏幕)
bash test.sh

2.进行重定向,但不指定标准输出和标准误输出
正确的在out.log中,错误的输出到标准输出流(屏幕)
bash test.sh > out.log

3.进行分开重定向,正确与错误分别进入两个log文件
bash test.sh > out.log 2 > error.log

4.进行分开重定向,将2输出到1中,两者都输出到out.log
bash test.sh > out.log 2>&1 ## 最推荐,可以把有问题的命令清晰呈现
 cat out.log

shell脚本的文件权限

Linux 之shell脚本编程_第27张图片
ll test.sh
chmod 764 test.sh

参数传递

vim test2.sh
i
  #!/bin/bash
  cat $1
ESC
:wq

bash test2.sh readme.txt
Linux 之shell脚本编程_第28张图片

• 任务提交

• nohup :不要挂断任务,即把任务提交到服务器上运行
• & :任务后台运行,通常与 nohup 连用
• top :实时显示系统中各个进程的资源占用状况,按 q 退出
• ps :Process Status列出当前系统中运行的进程列表,
一般加上 –ef 参数
• kill :杀掉进程,kill [PID]
Linux 之shell脚本编程_第29张图片
vim sleep.out
i
 #!/bin/bash
   for i in {1..500}
  do
  echo $i>>sleep.out
  sleep 2s
  done
ESC
:wq

1.挂后台运行
nohup bash sleep.out &  

2.动态查看输出内容(此处查看nohup.out是没有内容的哦)
tail -f sleep.out

3.用top、htop分别查看命令的运行情况
top -u Last30
htop -u Last30

4.用ps -ef查看挂后台的命令
ps -ef | grep "June16"  ##"登录名"

5.杀死命令
kill -9   id   ## kill -9 无条件杀死

推荐bash教程

Linux 之shell脚本编程_第30张图片

1.阮一峰的bash脚本教程Bash 脚本教程 - 网道

2. 鸟哥的Linux私房菜:基础学习篇 第四版 (第14章)第十二章、学习 Shell Scripts | 鸟哥的 Linux 私房菜:基础学习篇 第四版

你可能感兴趣的:(编程语言与技术,bash,linux,开发语言)