Linux shell脚本 扩展补充示例

news2024/11/24 20:48:06

通过变量切片、获取变量长度、产生随机数、合并字符串

最后生成随机密码

变量切片、获取变量长度

[xue@xue ~]$ a='1234567890'
[xue@xue ~]$ echo $a
[xue@xue ~]$ echo ${a}
[xue@xue ~]$ echo ${#a}    #获取变量长度
[xue@xue ~]$ echo ${a:3:3} #切片,第4个开始获取三个字符(4-6)
[xue@xue ~]$ echo ${a:7:2}
[xue@xue ~]$ echo ${a:5:1}

  

 

产生随机数

原理:RANDOM随机数(0-32767)取余a变量长度(10),即可获得随机个位数,属于简便的写法

最后用获得的个位随机数结果写入tmp,使用tmp的值作为位置在变量a中分片1位,以做到以变量a为密码池生成密码的效果

[xue@xue ~]$ echo ${a}  #显示变量
[xue@xue ~]$ echo ${#a} #变量长度
[xue@xue ~]$ echo $[RANDOM % ${#a}]
[xue@xue ~]$ echo $[RANDOM % ${#a}]
[xue@xue ~]$ echo $[RANDOM % ${#a}] 
[xue@xue ~]$ echo $[RANDOM % ${#a}]
[xue@xue ~]$ echo $[RANDOM % ${#a}]
#生成随机数,用其对变量长度(10)取余,获得个位随机数

合并字符串

 

 

 用上面的知识点生成随机密码

先取余获取个位随机数,用这个数作为str变量切片的开始位置并切片一位,循环8次,每次字符串合并追加,完成随机密码创建。(生成的密码所包含的字符取自str)

str='1234567890'

for i in {1..8}
do
    a=$[RANDOM % ${#str}]  #对随机数用str长度取余,获得一位的随机数
    tmp=${str:a:1}  #用一位随机数作为位置变量,对str随机切片
    pasw+=$tmp      #合并到pasw字符串中
done
echo "随机密码为: $pasw"

 

将0-255的十进制数转化为二进制数

除二取余倒排法

read -p "输入0-255整数" num

for i in {1..8}
do
    a=$[num % 2]$a     #取余,结果拼接到a前,完成余数倒排
    let num=$[num / 2] #将num除二,进入下一个循环
done
echo $a

 

减数正排法

输入的num减去for列表中的减数,能减去则输出1,并更改num减去刚刚的减数进行下一次循环。若减不进则输出0,直接下一个循环。

read -p "输入0-255整数" num

for i in {128,64,32,16,8,4,2,1}
do
    NUM=$[num - i]    #NUM作为预判断变量,先不对num直接处理
    if [ $NUM -lt 0 ] #判断是否能减进
    then
        echo -n 0     #减不进输出0,不对num处理,进入下一轮循环
    else
        echo -n 1     #能减进输出1   #-n不换行输出
        num=$[num-i]  #能减进输出则对num减去i,再进入下一轮循环
        #let num-=i   #与上句同义
    fi
done
echo ''

echo -e

echo -e "123\n456"      #换行
echo -e "123\c456"      #不换行
echo -n "123456"        #不换行

echo -e "123\t456"      #归档
echo -e "123\f456"      #归档换行
echo -e "123\v456"      #归档换行
echo -e "123\v456\f789" #归档换行
    
echo -e "123\r456"      #替换
echo -e "1234\r456"     #替换只能一样长度的!

 

awk 筛选列

[xue@xue ~]$ free -m    #查看内存
              total        used        free      shared  buff/cache   available
Mem:           3931        1078         806          86        2046        2509
Swap:          3968           0        3968


[xue@xue ~]$ free -m | grep Mem  #筛选MEM
Mem:           3931        1079         806          86        2046        2509


[xue@xue ~]$ free -m | grep Mem |awk '{print $3}'
1079      #再次筛选MEM行第三列

使用多种方法筛选文本(awk、切片)

echo '10.11.12.13' | awk -F. '{print $3}'  #以 . 分隔的第三段
i='10.11.12.13'

echo ${i:3:2}    #从第三位开始切2个字符

echo ${i%%.*}    #从后向前删到第一个 .
10
echo ${i%.*}     #从后向前删到最后一个 .
10.11.12
echo ${i#*.}     #从前向后删到第一个 .
11.12.13
echo ${i##*.}    #从前向后删到最后一个 .
13

 

循环读取文件内容

for a in $(cat 1.txt)       #不加cat直接输出只能输出文件名!
do
    echo $a
done

 

while read b
do
echo $b
done < 1.txt    #重定向输出
cat 1.txt | while read c  #cat管道符号
do
  echo $c
done

 

 

 seq命令

seq 1 2 10    #从1开始,每隔2,输出直到10
seq 2 3 10    #从2开始,每隔3,输出直到10

猴子摘下来n个香蕉,每天吃掉一半多一个,到第十天就剩一个,猴子第一天摘了多少香蕉?

由于到第十天,使用一共循环了九次。

每天吃掉一半多一个,所以先加上1在乘2.反推9次

#!bin/bash
n=1
for ((i=9;i>0;i--))
do
    n=$[(n+1)*2]
done

echo $n

菲波拉契数

初始ab均为1,每次相加a,b指针都后移一位,a=b,b=a+b。

a=1
b=1
for i in {1..10}
do
  echo $a
  sum=$[ a + b ]
  a=$b
  b=$sum
done

统计菲波拉契数和

a=1
b=1
C=0

for i in {1..10}
do
  echo $a
  C=$[C+a]
  sum=$[a+b]
  a=$b
  b=$sum
done
echo "sum=$C"

大文件分割

[xue@xue ~]$ cat wjfg.sh
a=0 #记录行数
b=1 #记录分隔文件序号标识

for i in $(cat anaconda-ks.cfg)
do
        let a++
        #a满20行c即可整除为0,进入if判断第一行。未满20进入if判断第二行
        c=$[a % 20]
        if [ $c -eq 0 ]
        then #满20句写入文件后,标识符b+1,下一次写入不同标识符的新文件
                echo $i >> ks.cfg-$b
                let b++
        else #不满20句的话写入当前文件,标识符不动,下一次仍然写入这个文件
                echo $i >> ks.cfg-$b
        fi
done

文件分隔了,但是很明显应该是4个文件却生成了9个,这是由于for将空格也算成了分隔符。

全局修改,此处不用,在脚本中修改,以免影响其他脚本

set | grep IFS  #修改IFS配置

IFS_OLD=$IFS    #保存IFS配置到IFS_OLD以便恢复
IFS=$'\n'        #设置IFS='\n',即将IFS=$' \t\n'的空格、制表位删除,只保留换行为分隔符

 修改后的脚本

[xue@xue ~]$ cat wjfg.sh
a=0 
b=1

IFS_OLD=$IFS      #修改IFS,备份 
IFS=$'\n'
 
for i in $(cat anaconda-ks.cfg)
do
        let a++
        c=$[a % 20]
        if [ $c -eq 0 ]
        then 
                echo $i >> ks.cfg-$b
                let b++
        else 
                echo $i >> ks.cfg-$b
        fi
done

IFS=$IFS_OLD      #改回原来的IFS 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/489478.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

力扣题库刷题笔记646-最长数对链

1、题目如下&#xff1a; 2、题解思路代码实现&#xff1a; 本题算是到目前为止&#xff0c;代码能读懂&#xff0c;但是思路并不能完全理解的代码&#xff08;大概能理解&#xff0c;但是无法完全描述&#xff0c;不看题解不能做出&#xff09;&#xff0c;涉及到贪心和排序。…

07_Uboot顶层Makefile分析_make xxx_defconfig

目录 make xxx_defconfig 过程 Makefile.build 脚本分析 scripts_basic 目标对应的命令 %config 目标对应的命令 make xxx_defconfig 过程 在编译uboot之前要使用"make xxx_defconfig"命令来配置uboot,那么这个配置过程是如何运行的呢?在顶层Makefile中有如下代…

C++类模板

类模板和函数模板语法相似&#xff0c;在声明模板template后面加类&#xff0c;此类称为类模板. 类模板作用&#xff1a; 建立一个通用类&#xff0c;类中的成员 数据类型可以不具体制定&#xff0c;用一个虚拟的类型来代表。 语法&#xff1a; template<typename T> …

深入解析PyTorch中的模型定义:原理、代码示例及应用

❤️觉得内容不错的话&#xff0c;欢迎点赞收藏加关注&#x1f60a;&#x1f60a;&#x1f60a;&#xff0c;后续会继续输入更多优质内容❤️ &#x1f449;有问题欢迎大家加关注私戳或者评论&#xff08;包括但不限于NLP算法相关&#xff0c;linux学习相关&#xff0c;读研读博…

【基础算法】大数运算问题

&#x1f339;作者:云小逸 &#x1f4dd;个人主页:云小逸的主页 &#x1f4dd;Github:云小逸的Github &#x1f91f;motto:要敢于一个人默默的面对自己&#xff0c;强大自己才是核心。不要等到什么都没有了&#xff0c;才下定决心去做。种一颗树&#xff0c;最好的时间是十年前…

Python高光谱遥感数据处理与机器学习(最新的技术突破讲解和复现代码)

将高光谱技术与Python编程工具结合起来&#xff0c;聚焦高频技术难点&#xff0c;明确开发要点&#xff0c;快速复现高光谱数据处理和分析过程&#xff0c;并对每一行代码进行解析&#xff0c;对学习到的理论和方法进行高效反馈。实践篇&#xff0c;通过高光谱矿物识别&#xf…

了解这个项目进度跟踪管理工具,轻松掌握项目进度

白天开会晚上干活的PM和战场上的将军没有区别&#xff0c;产品研发如同组团杀敌&#xff0c;团队配合最为重要。Zoho Projects项目管理工具&#xff0c;适用于各种规模和需求的公司。 一、需求管理 在项目中&#xff0c;我们使用它Zoho收集整理各方反馈&#xff0c;快速处理工单…

自媒体达人养成计划(ChatGPT+new bing)

本节课我们来探索如何使用GPT帮助我们成为自媒体达人&#xff0c;快速赚到一个小目标&#xff01;在此之前&#xff0c;我们需要先做些准备工作~ 首先是平台选取&#xff0c;写文章第一件事就是要保证内容的有效性和准确性&#xff0c;不然就成为营销号了嘛&#xff0c;所以我…

5---最长回文字串

给你一个字符串 s&#xff0c;找到 s 中最长的回文子串。 如果字符串的反序与原始字符串相同&#xff0c;则该字符串称为回文字符串。 示例 1&#xff1a; 输入&#xff1a;s “babad” 输出&#xff1a;“bab” 解释&#xff1a;“aba” 同样是符合题意的答案。 示例 2&…

改进沙猫群优化算法(ISCSO)-附代码

改进沙猫群优化算法(ISCSO) 文章目录 改进沙猫群优化算法(ISCSO)1.沙猫群优化算法2. 改进沙猫群优化算法2.1 混沌映射初始化2.2 引入互利共生策略2.3 引入莱维飞行策略 3.实验结果4.参考文献5.Matlab代码6.Python代码 摘要&#xff1a;对沙猫群优化算法进行改进。在改进的沙猫群…

Vue.js 教程---菜鸟教程

文章目录 Vue.js 教程Vue.js 安装Vue.js 起步Vue.js 模板语法插值指令用户输入过滤器缩写 Vue.js 条件语句Vue.js 循环语句Vue.js 计算属性Vue.js 监听属性Vue.js样式绑定 Vue.js 教程 本教程主要介绍了 Vue2.x 版本的使用 第一个实例&#xff1a; <body> <div id&…

Linux 信号学习

Linux 信号学习 信号量的基本概念信号产生的条件信号如何被处理信号的异步特质 信号的分类可靠信号/不可靠信号实时信号/非实时信号 常见信号与默认行为信号处理signal() 函数sigaction()函数 向进程发送信号kill() 函数raise() 函数 alarm()和pause()函数alarm() 定时函数paus…

玩转传感器----理解时序和数据采集(DHT11)

该文章以DHT11模块进行分析 目录 1.模块复位&#xff08;时序图&#xff09; 2.DHT11的应答信号 3.读取1bit数值&#xff08;比较高电平的时间是否大于40us&#xff09; 4.读取一个字节 5.把读取的字节放入单片机 6. 寄存器设置IO口方向 1.模块复位&#xff08;时序图&a…

22.Java多线程

Java多线程 一、进程和线程 进程是程序的一次动态执行过程&#xff0c;它需要经历从代码加载&#xff0c;代码执行到执行完毕的一个完整的过程&#xff0c;这个过程也是进程本身从产生&#xff0c;发展到最终消亡的过程。多进程操作系统能同时达运行多个进程&#xff08;程序…

使用Python接口自动化测试post请求和get请求,获取请求返回值

目录 引言 请求接口为Post时&#xff0c;传参方法 获取接口请求响应数据 引言 我们在做python接口自动化测试时&#xff0c;接口的请求方法有get,post等&#xff1b;get和post请求传参&#xff0c;和获取接口响应数据的方法&#xff1b; 请求接口为Post时&#xff0c;传参方法…

C++系列二:数据类型

C数据类型 1. 原始类型2. 复合类型3. 类型转换3.1 隐式类型转换3.2 显式类型转换 4. 总结&#xff08;手稿版&#xff09; 1. 原始类型 C 中的原始类型包括整型&#xff08;integral types&#xff09;、浮点型&#xff08;floating-point types&#xff09;、字符型&#xff…

涨薪60%,从小厂逆袭,坐上美团技术专家(面经+心得)

前言 大多数情况下&#xff0c;程序员的个人技能成长速度&#xff0c;远远大于公司规模或业务的成长速度。所以&#xff0c;跳槽成为了这个行业里最常见的一个词汇。 实际上&#xff0c;跳槽的目的无非是为了涨薪或是职业发展&#xff0c;我也不例外。普通本科毕业后&#xf…

计算机网络基础知识(一)计算机发展史、网络设备、网络结构及拓扑

文章目录 01 | 网络设备02 | 网络结构 && 拓扑 网络发展史可以追溯到20世纪60年代&#xff0c;当时美国国防部高级研究计划署&#xff08;ARPA&#xff09;启动了一个名为 ARPANET 的项目&#xff0c;旨在建立军事目的的分布式通信网络&#xff0c;使得网络中的任何一台…

【redis】redis红锁Redlock算法和底层源码分析

【redis】redis红锁Redlock算法和底层源码分析 文章目录 【redis】redis红锁Redlock算法和底层源码分析前言一、当前代码为8.0版&#xff0c;接上一步分布式锁的主要考点lock加锁关键逻辑unlock解锁关键逻辑 二、redis分布式锁-Redlock红锁主页说明:目前所写的分布式锁还有什么…

c++自学笔记(陆续更新)

本笔记为从菜鸟教程边学边记录的笔记---》C 教程 | 菜鸟教程 面向对象程序设计 封装&#xff08;Encapsulation&#xff09;&#xff1a;封装是将数据和方法组合在一起&#xff0c;对外部隐藏实现细节&#xff0c;只公开对外提供的接口。这样可以提高安全性、可靠性和灵活性。…