首页 > 系统相关 >shell进阶

shell进阶

时间:2024-08-31 17:03:44浏览次数:6  
标签:shell 进阶 up 数组 echo sh 随机数 array

一、探测同网段哪些ip正在被使用

[root@rocky8 ~]#cat ping.sh

!/bin/bash

**********************************************************

Author: liangweisong

QQ: [email protected]

Date: 2024-08-31

FileName: ping.sh

URL:

Description: The test script

**********************************************************

NET=10.0.0

NET为所处网段的前24位十进制地址

for i in {1..254};do
{
ping -c1 -W1 $NET.$i &> /dev/null && echo $NET.$i is up| tee -a ./up_list.txt || echo $NET.$i is down
}&
done
wait

创建文件

[root@rocky8 ~]#touch up_list.txt

执行脚本

[root@rocky8 ~]#bash ping.sh
10.0.0.1 is up
10.0.0.2 is up
10.0.0.210 is up
10.0.0.153 is up
10.0.0.3 is down
......
[root@rocky8 ~]#cat up_list.txt
10.0.0.1 is up
10.0.0.2 is up
10.0.0.210 is up
10.0.0.153 is up

二、使用while read line和/etc/passwd,计算用户id总和。

while 循环的特殊用法,遍历文件或文本的每一行

while read line; do
循环体
done < /PATH/FROM/SOMEFILE

[root@rocky8 ~]#cat wrl.sh

!/bin/bash

**********************************************************

Author: liangweisong

QQ: [email protected]

Date: 2024-08-31

FileName: wrl.sh

URL:

Description: 使用while read line和/etc/passwd,计算用户id总和。

**********************************************************

初始化 UID 总和为 0

uid_sum=0

逐行读取 /etc/passwd 文件

while IFS=: read -r username password uid gid fullname home_directory shell; do
# 将 UID 转换为整数并累加到总和中
uid_sum=$((uid_sum + uid))
done < /etc/passwd

打印 UID 总和

echo "The sum of all user IDs is: $uid_sum"
[root@rocky8 ~]#bash wrl.sh
The sum of all user IDs is: 72071

三、总结索引数组和关联数组,字符串处理,高级变量使用及示例。

3.1 索引数组

索引数组是一种基于数字索引的数组。每个元素都有一个唯一的整数索引。

创建索引数组

创建一个空数组

indexed_array=()

添加元素

indexed_array+=(element1 element2 element3)

或者

indexed_array[0]="element1"
indexed_array[1]="element2"
indexed_array[2]="element3"

访问数组元素

访问第一个元素

first_element=${indexed_array[0]}

访问最后一个元素

last_element=${indexed_array[-1]}

遍历数组

for element in "${indexed_array[@]}"; do
echo "$element"
done

3.2 关联数组

关联数组是一种基于键值对的数组。每个元素都有一个唯一的键(字符串)和对应的值。

创建关联数组

创建一个空关联数组

declare -A assoc_array

添加元素

assoc_array[key1]="value1"
assoc_array[key2]="value2"
assoc_array[key3]="value3"

访问关联数组元素

访问键为 key1 的元素

value1=${assoc_array[key1]}

遍历关联数组

for key in "${!assoc_array[@]}"; do
value=${assoc_array[$key]}
echo "$key: $value"
done

1.3 字符串处理

字符串拼接

string1="Hello"
string2="World"
full_string="$string1 $string2"

字符串替换

string="Hello World"
new_string="${string//World/Universe}"
echo "$new_string" # 输出 "Hello Universe"

字符串分割

string="apple,banana,orange"
IFS=',' read -ra fruits <<< "$string"
for fruit in "${fruits[@]}"; do
echo "$fruit"
done

字符串长度

string="Hello World"
length=${#string}
echo "$length" # 输出 11

四、求10个随机数的最大值与最小值。

[root@rocky8 ~]#cat random.sh

!/bin/bash

**********************************************************

Author: liangweisong

QQ: [email protected]

Date: 2024-08-31

FileName: random.sh

URL:

Description: 求10个随机数的最大值与最小值。

**********************************************************

初始化最大值和最小值变量

max=-999999
min=999999

循环10次来生成10个随机数

for i in {1..10}
do
# 生成1到100之间的随机数
num=$(( (RANDOM % 100) + 1 ))

# 打印生成的随机数
echo "随机数 $i: $num"

# 更新最大值和最小值
if [ "$num" -gt "$max" ]; then
    max="$num"
fi
if [ "$num" -lt "$min" ]; then
    min="$num"
fi

done

输出最大值和最小值

echo "最大值: $max"
echo "最小值: $min"
[root@rocky8 ~]#bash random.sh
随机数 1: 87
随机数 2: 7
随机数 3: 100
随机数 4: 48
随机数 5: 12
随机数 6: 17
随机数 7: 2
随机数 8: 98
随机数 9: 50
随机数 10: 33
最大值: 100
最小值: 2

五、使用递归调用,完成阶乘算法实现。

[root@rocky8 ~]#cat factorial.sh

!/bin/bash

**********************************************************

Author: liangweisong

QQ: [email protected]

Date: 2024-08-31

FileName: test.sh

URL:

Description: The test script

**********************************************************

阶乘函数

factorial() {
local n=$1
# 基本情况
if [ "$n" -eq 0 ]; then
echo 1
else
# 递归调用
echo $(( n * $(factorial $((n - 1))) ))
fi
}

测试阶乘函数

number=9
result=$(factorial $number)
echo "$number 的阶乘是 $result"

标签:shell,进阶,up,数组,echo,sh,随机数,array
From: https://www.cnblogs.com/lyon-blog/p/18390491

相关文章

  • SQL Server高级进阶之索引碎片维护
    SQLServer高级进阶之索引碎片维护 一、产生原因及影响索引是数据库引擎中针对表(有时候也针对视图)建立的特别数据结构,用来帮助查找和整理数据,它的重要性体现在能够使数据库引擎快速返回查询结果。当对索引所在的基础数据表进行增删改时,若存储的数据进行了不适当的跨页(SQLServer......
  • Datawhale X 李宏毅苹果书 AI夏令营 第五期 深度学习(进阶班)Task02 笔记分享
    文章目录Task2-1:《深度学习详解》-3.3&4&5自适应学习率(9页+38分钟)Part01:视频笔记训练技巧:自适应学习率(Adaptivelearningrate):学习率应该为每一个参数特质化:RootMeanSquare(均方根):......
  • 【Shell脚本】查看Linux网卡实时流量
    原创唐哥成长的小学生在Linux操作系统中,查询网卡流量并不是特别方便,而且统计方式也不直观,下面给大家整理了一个脚本,直接复制到服务器上运行即可,不存在什么依赖关系。脚本内容将内容保存到一个文件中,文件名称可以自定义,比如:vicatnet.sh将以下内容保存到脚本中#!/bin/......
  • [昌哥IT课堂]使用MySQL Shell 部署沙盒数据库实例详解
     概述:这部分解释了如何使用AdminAPI设置沙盒部署。部署和使用本地MySQL的沙盒实例是开始探索AdminAPI的好方法。在将功能部署到生产服务器之前,您可以在本地测试功能。AdminAPI具有内置功能,用于创建正确配置的沙箱实例,以便在本地部署的情况下与InnoDBCluster、InnoDBClusterS......
  • 【C语言进阶】C语言指针进阶实战:优化与难题解析
    ......
  • 再次进阶 舞台王者 第八季完美童模全球赛主持人【王艺哲】赛场&秀场超燃合集!
    7月20-23日,2024第八季完美童模全球总决赛在青岛圆满落幕。在盛大的颁奖典礼上,一位才能出众的少女——王艺哲迎来了她舞台生涯的璀璨时刻。主持人——王艺哲,以璀璨童星之姿,优雅地踏上完美童模盛宴的绚丽舞台,作为开场小嘉宾,她瞬间成为了全场瞩目的焦点。她以一种超越年龄的自信与风度......
  • 用Shell写一个crontab定时任务
    前言很多时候我们有希望服务器定时去运行一个脚本来触发一个操作,比如说定时去备份服务器数据、数据库数据等不适合人工经常做的一些操作这里简单说下shell Shell俗称壳,类似于DOS下的command和后来的cmd.exe。它接收用户命令,然后调用相应的应用程序。作为命令语言,它交互式解释......
  • shell的使用
    第一个shell程序介绍#!/bin/bash#Thisisaverysimpleexampleecho"HelloWorld"#!/bin/bash 表明该文件是一个 BASH 程序,需要由 /bin 目录下的 bash 程序来解释执行。BASH 这个程序一般是存放在 /bin 目录下,如果你的Linux系统比较特别,bash 也有可能被存......
  • Linux之shell脚本变量
    变量是脚本种的一种重要的属性,它可以存储值,这就大大的增加了脚本的灵活性使得脚本的应用更为广泛。自定义变量变量名=值(等号两边不能有空格)在linux内可以定义变量然后用$引用如果要在调用后面加字符之类的则可以使用${变量名}字符环境变量系统帮你定义好的变量例如US......
  • PowerShell Select-String:在字符串和文件中查找文本
    语法Select-String[-Culture<String>][-Pattern]<String[]>[-Path]<String[]>[-SimpleMatch][-CaseSensitive][-Quiet][-List][-NoEmphasis][-Include<String[]>][-Exclu......