shell脚本学习笔记

shell脚本重点记录

判断文件或者文件夹是否存在
shell脚本学习笔记_第1张图片

if [ ! -d "log" ];then
chmod 707 $file1

一个文件的权限包括读取、写入、执行,权限范围包含所有者、所属组、其他人,可以通过数字或者字母描述一个文件的权限:读取权限对应r或4,写入权限对应w或2,执行权限对应x或1。例如7代表读取写入执行权限,6代表读取写入权限,5代表读取执行权限,4代表读取权限,3代表写入执行权限,2代表写入权限,1代表执行权限,0代表无权限。

log=`ls -l | grep monitor |awk '{print $8}' |sort -n | awk 'END{print}' |cut -d '_' -f 1`

ls -l 列出文件的具体信息。grep 提取包含monitor的行。awk对每一行分割,并打印每一行第八个元素。使用纯数字进行排序。任何在BEGIN之后列出的操作(在{}内)将在Unix awk开始扫描输入之前执行,而END之后列出的操作将在扫描完全部的输入之后执行。因此,通常使用BEGIN来显示变量和预置(初始化)变量,使用END来输出最终结果。sort递增的顺序排序,cut -d 分隔符 -f 第几段

cut用于对一行的文字进行分割

 cut -d'分隔字符' -f fields <==用于有特定分隔字符
 cut -c 字符区间 <==用于排列整齐的讯息

awk用于将一行的文字分为不同的字段,后面接两个单引号并加上大括号 {} 来设定想要对数据进行的处理动作,而默认的『字段的分隔符为 “空格键” 或 “[tab]键” 。
grep用于在多行文本中搜索字符串,提取包含指定字符串的行

awk '条件类型 1{动作 1} 条件类型 2{动作 2} ...' filename
grep [-acinv] [--color=auto] '搜寻字符串' filename
选项与参数:
-a :将 binary 文件以 text 文件的方式搜寻数据
-c :计算找到 '搜寻字符串' 的次数
-i :忽略大小写的不同,所以大小写视为相同
-n :顺便输出行号
-v :反向选择,亦即显示出没有 '搜寻字符串' 内容的那一行!
--color=auto :可以将找到的关键词部分加上颜色的显示喔!

grep [-A] [-B] [--color=auto] '搜寻字符串' filename

练习作业

目标:提取CPU和内存的使用情况,并保存为CSV文件,并通过图标可视化。
shell脚本如下

#!/bin/bash  
 
interval=1  
  
output_file="cpu_mem_info.csv"  
  
start_time=$(date +%s)  
  

while true; do  

  current_time=$(date +%s)  
  
  run_time=$((current_time - start_time))  
  
  us=$(top -bn1 | grep "Cpu(s)" | awk '{print $2}')  
  sy=$(top -bn1 | grep "Cpu(s)" | awk '{print $4}')
  ni=$(top -bn1 | grep "Cpu(s)" | awk '{print $6}')
  id=$(top -bn1 | grep "Cpu(s)" | awk '{print $8}')

  mem_total=$(free -m | awk 'NR==2{print $2}')  
  mem_used=$(free -m | awk 'NR==2{print $3}')  
  mem_free=$(free -m | awk 'NR==2{print $4}')

 
  echo "$run_time,$us,$sy,$ni,$id,$mem_total,$mem_used,$mem_free" >> "$output_file"  
  
 
  sleep $interval  
done

csv文件的部分内容如下

0,0.8,0.4,2.0,96.7,16005,7608,481
1,0.8,0.4,2.0,96.7,16005,7607,482
3,0.8,0.4,2.0,96.7,16005,7605,484
5,0.8,0.4,2.0,96.7,16005,7623,466
6,0.8,0.4,2.0,96.7,16005,7620,469
8,0.8,0.4,2.0,96.7,16005,7617,472
10,0.8,0.4,2.0,96.7,16005,7617,472
12,0.8,0.4,2.0,96.7,16005,7617,472
13,0.8,0.4,2.0,96.7,16005,7624,472
15,0.8,0.4,2.0,96.7,16005,7613,483
17,0.8,0.4,2.0,96.7,16005,7613,484
19,0.8,0.4,2.0,96.7,16005,7612,485
20,0.8,0.4,2.0,96.7,16005,7613,484
22,0.8,0.4,2.0,96.7,16005,7613,484
24,0.8,0.4,2.0,96.7,16005,7613,484
25,0.8,0.4,2.0,96.7,16005,7612,484
27,0.8,0.4,2.0,96.7,16005,7612,484
29,0.8,0.4,2.0,96.7,16005,7612,484
31,0.8,0.4,2.0,96.7,16005,7613,484
32,0.8,0.4,2.0,96.7,16005,7612,484

记录一段时间后csv可视化如下所示

shell脚本学习笔记_第2张图片

系统移植笔记

在进行 Linux 驱动开发之前肯定需要先将Linux 系统移植到开发板上去。大致步骤分为移植bootloader代码、Linux内核和根文件系统

bootloader

bootloader用于启动Linux系统内核,芯片上电之后会首先运行bootloader程序,首先初始化DDR等外设,然后将Linux内核从flash中拷贝到DDR中,并启动Linux内核。U-Boot是最为广泛使用的bootloader程序。
uboot 官方的 uboot 源码是给半导体厂商准备的,半导
体厂商会下载 uboot 官方的 uboot 源码,然后将自家相应的芯片移植进去。我们自己做的板子就需要修改芯片厂商官方的 uboot,使其支持我们自己做的板子。 uboot 官方的基本是不会用的,因为支持太弱了。最常用的就是半导体厂商或者开发板厂商的 uboot,所以uboot移植是指通过半导体厂商提供的uboot适配自己的开发板。

你可能感兴趣的:(学习,笔记)