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

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

    • [二十. 十六至十九章知识点总结及练习](#二十. 十六至十九章知识点总结及练习)
      • [20.1 总结](#20.1 总结)
      • [20.2 练习](#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)
bash 复制代码
[root@node-135 bin]# cat ww.sh
#!/bin/bash
# Program:
# report whoami and pwd
# History:
# 2023/08/10 yurq First Release

PATH=$PATH:~/bin
export PATH

whoami
pwd
  • 请自行建立一支程序,该程序可以用来计算『你还有几天可以过生日』啊?
bash 复制代码
#!/bin/bash
read -p "Pleas input your birthday (MMDD, ex> 0709): " bir
now=`date +%m%d`
if [ "$bir" == "$now" ]; then
	echo "Happy Birthday to you!!!"
elif [ "$bir" -gt "$now" ]; then
	year=`date +%Y`
	total_d=$(($((`date --date="$year$bir" +%s`-`date +%s`))/60/60/24))
	echo "Your birthday will be $total_d later"
else
	year=$((`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... 一直累加到用户输入的数字为止。
bash 复制代码
#!/bin/bash
read -p "Please input an integer number: " number
i=0
s=0
while [ "$i" != "$number" ]
do
	i=$(($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.) 如果存在的话,而且该名称为目录,则移除此目录!
bash 复制代码
[root@node-135 bin]# cat logical.sh
#!/bin/bash
# Program:
# check /root/test/logical
# History:
# 2023/08/10 yurq First Release

PATH=$PATH:~/bin
export PATH

logical="/root/test/logical"

if [ ! -e $logical ];then
        if [ ! -d `dirname $logical` ];then
                mkdir -p `dirname $logical`
                echo "mkdir /root/test/"
        fi

        touch $logical && echo "touch logical"
        exit 0
elif [ -f $logical ];then
        rm -rf $logical
        echo "logical is file,remove it"
        mkdir -p $logical

        echo "logical is dir,make it"
        exit 0
elif [ -d $logical ];then
        rm -rf $logical

        echo "logical is dir,remove it"
        exit 0
else
        echo "$logical maybe error"
        ls -l $logical

fi
  • 我们知道 /etc/passwd 里面以 : 来分隔,第一栏为账号名称。请写一只程序,可以将 /etc/passwd 的第一栏取出,而且每一栏都以一行字符串『The 1 account is "root" 』来显示,那个 1 表示行数。
bash 复制代码
[root@node-135 bin]# cat echouser.sh
#!/bin/bash
# Program:
# echo user number
# History:
# 2023/08/10 yurq First Release

PATH=$PATH:~/bin
export PATH


userlist=`cut -d":" -f 1 /etc/passwd`
num=1
for i in ${userlist};do
        echo "The $num account is \"$i\""
        num=$(($num+1))
done

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

相关推荐
喵叔哟10 分钟前
重构代码中引入外部方法和引入本地扩展的区别
java·开发语言·重构
尘浮生16 分钟前
Java项目实战II基于微信小程序的电影院买票选座系统(开发文档+数据库+源码)
java·开发语言·数据库·微信小程序·小程序·maven·intellij-idea
hopetomorrow30 分钟前
学习路之PHP--使用GROUP BY 发生错误 SELECT list is not in GROUP BY clause .......... 解决
开发语言·学习·php
小牛itbull40 分钟前
ReactPress vs VuePress vs WordPress
开发语言·javascript·reactpress
请叫我欧皇i1 小时前
html本地离线引入vant和vue2(详细步骤)
开发语言·前端·javascript
闲暇部落1 小时前
‌Kotlin中的?.和!!主要区别
android·开发语言·kotlin
GIS瞧葩菜1 小时前
局部修改3dtiles子模型的位置。
开发语言·javascript·ecmascript
chnming19871 小时前
STL关联式容器之set
开发语言·c++
熬夜学编程的小王1 小时前
【C++篇】深度解析 C++ List 容器:底层设计与实现揭秘
开发语言·数据结构·c++·stl·list
GIS 数据栈1 小时前
每日一书 《基于ArcGIS的Python编程秘笈》
开发语言·python·arcgis