当前位置: 首页 > news >正文

【BASH】回顾与知识点梳理(二十)

【BASH】回顾与知识点梳理 二十

    • 二十. 十六至十九章知识点总结及练习
      • 20.1 总结
      • 20.2 练习

该系列目录 --> 【BASH】回顾与知识点梳理(目录)

二十. 十六至十九章知识点总结及练习

20.1 总结

  • shell script 是利用 shell 的功能所写的一个『程序 (program)』,这个程序是使用纯文本文件,将一些 shell 的语法与指令(含外部指令)写在里面, 搭配正规表示法、管线命令与数据流重导向等功能,以达到我们所想要的处理目的
  • shell script 用在系统管理上面是很好的一项工具,但是用在处理大量数值运算上, 就不够好了,因为 Shell scripts 的速度较慢,且使用的 CPU 资源较多,造成主机资源的分配不良。
  • 在 Shell script 的文件中,指令的执行是从上而下、从左而右的分析与执行;
  • shell script 的执行,至少需要有 r 的权限,若需要直接指令下达,则需要拥有 r 与 x 的权限;(用sh shell.sh执行脚本,脚本至少要有r权限,而如果通过绝对路径或相对路径直接执行脚本,则脚本至少要有rx权限)
  • 良好的程序撰写习惯中,第一行要宣告 shell (#!/bin/bash) ,第二行以后则宣告程序用途、版本、作者等
  • 对谈式脚本可用 read 指令达成;
  • 要建立每次执行脚本都有不同结果的数据,可使用 date 指令利用日期达成(date --date=“20230810” +%s);
  • script 的执行若以 source 来执行时,代表在父程序的 bash 内执行之意!
  • 若需要进行判断式,可使用 test 或中括号 ( [] ) 来处理;
  • 在 script 内,$0, $1, $2…, $@ 是有特殊意义的!
  • 条件判断式可使用 if...then 来判断,若是固定变量内容的情况下,可使用 case $var in ... esac 来处理
  • 循环主要分为不定循环 (while, until) 以及固定循环 (for) ,配合 do, done 来达成所需任务!
  • 我们可使用 sh -x script.sh 来进行程序的 debug

20.2 练习

  • 请建立一支 script ,当你执行该 script 的时候,该 script 可以显示: 1. 你目前的身份 (用 whoami ) 2. 你目前所在的目录 (用 pwd)
[root@node-135 bin]# cat ww.sh
#!/bin/bash
# Program:
# report whoami and pwd
# History:
# 2023/08/10 yurq First ReleasePATH=$PATH:~/bin
export PATHwhoami
pwd
  • 请自行建立一支程序,该程序可以用来计算『你还有几天可以过生日』啊?
#!/bin/bash
read -p "Pleas input your birthday (MMDD, ex> 0709): " bir
now=`date +%m%d`
if [ "$bir" == "$now" ]; thenecho "Happy Birthday to you!!!"
elif [ "$bir" -gt "$now" ]; thenyear=`date +%Y`total_d=$(($((`date --date="$year$bir" +%s`-`date +%s`))/60/60/24))echo "Your birthday will be $total_d later"
elseyear=$((`date +%Y`+1))total_d=$(($((`date --date="$year$bir" +%s`-`date +%s`))/60/60/24))echo "Your birthday will be $total_d later"
fi
  • 让用户输入一个数字,程序可以由 1+2+3… 一直累加到用户输入的数字为止。
#!/bin/bash
read -p "Please input an integer number: " number
i=0
s=0
while [ "$i" != "$number" ]
doi=$(($i+1))s=$(($s+$i))
done
echo "the result of '1+2+3+...$number' is ==> $s"
  • 撰写一支程序,他的作用是:
    • 1.) 先查看一下 /root/test/logical 这个名称是否存在;
    • 2.) 若不存在,则建立一个文件,使用 touch 来建立,建立完成后离开;
    • 3.) 如果存在的话,判断该名称是否为文件,若为文件则将之删除后建立一个目录,文件名为 logical ,之后离开;
    • 4.) 如果存在的话,而且该名称为目录,则移除此目录!
[root@node-135 bin]# cat logical.sh
#!/bin/bash
# Program:
# check /root/test/logical
# History:
# 2023/08/10 yurq First ReleasePATH=$PATH:~/bin
export PATHlogical="/root/test/logical"if [ ! -e $logical ];thenif [ ! -d `dirname $logical` ];thenmkdir -p `dirname $logical`echo "mkdir /root/test/"fitouch $logical && echo "touch logical"exit 0
elif [ -f $logical ];thenrm -rf $logicalecho "logical is file,remove it"mkdir -p $logicalecho "logical is dir,make it"exit 0
elif [ -d $logical ];thenrm -rf $logicalecho "logical is dir,remove it"exit 0
elseecho "$logical maybe error"ls -l $logicalfi
  • 我们知道 /etc/passwd 里面以 : 来分隔,第一栏为账号名称。请写一只程序,可以将 /etc/passwd 的第一栏取出,而且每一栏都以一行字符串『The 1 account is “root” 』来显示,那个 1 表示行数。
[root@node-135 bin]# cat echouser.sh
#!/bin/bash
# Program:
# echo user number
# History:
# 2023/08/10 yurq First ReleasePATH=$PATH:~/bin
export PATHuserlist=`cut -d":" -f 1 /etc/passwd`
num=1
for i in ${userlist};doecho "The $num account is \"$i\""num=$(($num+1))
done

该系列目录 --> 【BASH】回顾与知识点梳理(目录)

http://www.lryc.cn/news/118322.html

相关文章:

  • Arduino驱动SGP40空气质量传感器(气体传感器篇)
  • 识别和应对内存抖动
  • 3.3用于共享数据保护的替代工具
  • 探索数据之美:初步学习 Python 柱状图绘制
  • 647. 回文子串
  • cmake (更新中)
  • 【go语言基础】指针数组和数组指针
  • ModaHub魔搭社区——Milvus Cloud向量数据库
  • 【Java】常用Stream API
  • P1941 [NOIP2014 提高组] 飞扬的小鸟
  • Vue3+Element plus+pageHelper实现分页
  • 外贸路上那些哭笑不得的事情
  • 双端列表 —— Deque 接口概述,使用ArrayDeque实现队列和双端队列数据结构
  • 构建可观测架构,从这5个方面着手
  • 前端面试的性能优化部分(7)每天10个小知识点
  • 【云原生】kubernetes中容器的资源限制
  • java Long型数据返回到前端失进度问题解决
  • 【设计模式】-策略模式:优雅处理条件逻辑
  • SpringBoot整合多数据源
  • CLIP论文精度
  • LouvainMethod分布式运行的升级之路
  • 【Node.js】低代码平台源码
  • docker 部署 xxl-job-admin
  • c++(空间配置器)[32]
  • Linux系列之解压文件
  • 为什么重写equals方法时必须重写hashcode方法
  • java导入excel图片处理
  • 【Rust】Rust学习 第四章认识所有权
  • 学习C语言第三天 :关系操作符、逻辑操作符
  • Jenkins自动化打包脚本