首页 > 系统相关 >shell进阶

shell进阶

时间:2024-09-01 21:56:42浏览次数:21  
标签:tmp do shell 进阶 -- filename done echo

1.求0-200的总和

#! /bin/bash

sum=0

for i in `seq 1 200`

do

sum=$[$i+$sum]

done

echo $sum

以上为0-200的总和的一个代码,首先需要将sum赋值为零,i从1取到200,每取一个数进行累加,并输出最终结果

注:如果echo放在done前,会输出每次累加的结果,直到i等于200

2.求1-n的总和

#! /bin/bash

n=0

while [ $n -lt 1 ]; do

read -p "Please input a number,it must greater than 1:" n

done

sum=0

for i in `seq 1 $n`

do

sum=$[$i+$sum]

done

echo $sum

其中while的作用就是防止输入小于1的数,当输入小于1的数时,会无限循环,直到输入的数大于等于1,然后开始执行1-n的累加

3.打印指定三角

#! /bin/bash

read -p "Please a number:" a

for i in `seq 1 $a`

do

for ((j=$a;j>i;j--))

do

echo -n " "

done

for ((k=1;k<=i;k++))

do

echo -n "* "

done

echo

done

以上为输入大小,以该大小为边长,输出对应的等边三角形

我们了解到,输入3的话,在第一行需要先输入2个空格加1个,第二行是1个空格2个,第三行零个空格3个*

空格的数量是我们输入边长的大小-1,随着行号增加而减少

*的数量与行号相同

设空格数量为j,输入边长为a,*数量为k,行号为i

行号i的取值范围就是1-a,用shell表示为seq 1 $a

每行*数就是1-a,用shell表示为seq 1 $a,还可以表示为

k=1;k<=i;k++(开始为1,最大值为i)

那么空格数就等于 j=$a;j>i;j--(开始为a,最小值为i+1)

4.shell检查并拷贝目录

-e filename 如果filename存在,则为真

-d filename 如果filename为目录,则为真

-f filename 如果filename为常规文件,则为真

-L filename 如果filename为符号连接,则为真

-r filename 如果filename可读,则为真

-w filename 如果filename可写,则为真

-x filename 如果filename可执行,则为真

-s filename 如果filename长度不为0,则为真

-h filename 如果filename为软连接,则为真

filename1 -nt filename2 如果filename1比filename2新,则为真

filename1 -ot filename2如果 filename1比filename2旧,则为真

#! /bin/bash

cd /root

for i in `ls `;

do

if [ -d $i ]; then

cp -r $i /tmp

fi

done

以上代码为一个简单的拷贝目录,首先判断/root路径下的目录,若为目录则将目录及其内容拷贝到/tmp临时目录中

注:/tmp这个目录通常用于存储临时文件和临时目录,这些文件在系统重启后会被删除

5.批量添加用户

#! /bin/bash

groupadd wudi

for i in `seq -w 0 11`; do

useradd -g wudi yonghu$i

done

groupadd wudi:创建名为wudi的组

seq -w:用于在列前添加0,以保持列宽相同。

useradd -g wudi yonghu$i:在wudi这个组创建名为yonghu$i的用户($取值为0-11)

运行完成后,我们就添加了12个用户

cat /etc/group 查看组,我们在里面就能看到wudi这个组了

cat /etc/passwd 查看用户基本信息,我们就能看到yonghu01-yonghu11的基本信息了

ll /home 查看用户,我们就能看到yonghu01-yonghu11

6.批量删除用户

#! /bin/bash

for i in `seq -w 0 11`; do

userdel -r yonghu$i

done

groupdel wudi

先删除yonghu01-yonghu11用户,再删除wudi组

7.查找内容并排序

#! /bin/bash

awk -F ':' '$0~/oo/ {print $1}' /tmp/text.txt > /tmp/n.txt

sort -n /tmp/n.txt | uniq -c | sort -n > /tmp/n2.txt

awk '$1>2 {print $2}' /tmp/n2.txt

以上就是一个简单的查找指定内容并排序的脚本,不懂的awk的小伙伴可以看下我之前发布的awk的解析

sort -n:将输入的每一行视为数值,并根据这些数值的大小进行排序。

uniq -c:忽略文件中的重复行

8.脚本函数的定义

#! /bin/bash

f_judge(){

if [ -d /tmp/log ]; then

cp /var/log/* /tmp/log

else

mkdir -p /tmp/log

exit

fi

}

f_judge

创建脚本函数f_judge,如果/tmp/log为目录,则将/var/log目录下所有的内容复制到/tmp/log里,如果/tmp/log不存在,则创建/tmp/log目录

9.脚本函数定义(循环)

#! /bin/bash

function message (){

echo "1:w"

echo "2:ls"

echo "3:quit"

read -p "Please input a number:" a

}

message

while [ $a -ne '3' ]; do

case $a in

1)

w

;;

2)

ls

;;

3)

exit

;;

*)

echo "nuknown command"

;;

esac

message

done

循环解析:while [ $a -ne '3' ]; do如果输入的内容不等于3(退出),就继续以下循环,函数message需要放在循环中,当输入值不等于3时,需要继续输出message函数,其中w,ls为命令操作

10.脚本IP地址检测

#! /bin/bash

function checkip(){

if echo $1 | egrep -q '^[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}$'

then

a=`echo $1 | awk -F '.' '{print $1}'`

b=`echo $1 | awk -F '.' '{print $2}'`

c=`echo $1 | awk -F '.' '{print $3}'`

d=`echo $1 | awk -F '.' '{print $4}'`

for n in $a $b $c $d; do

if [ $n -gt 255 ] || [ $n -lt 0 ]; then

echo "the number should greater than 255 and less than 0" return 2

fi

done

else

echo "Input is something wrong,the format is like 192.168.100.1"

return 1

fi

}

re=1

while [ $re -gt 0 ];do

read -p "please input the ip" ip

checkip $ip

re=`echo $?`

done

echo "The ip is right"

这个脚本用于检测输入ip地址是否复合规范

解析:echo $1表示输入的ip地址

echo $?表示上一步结束返回的值

11.添加删除用户脚本

#! /bin/bash

if [ $# -eq 0 -o $# -gt 2 ]

then

echo "user $0 --add username or $0 --del username or $0 --help"

exit 1

fi

case $1 in

--add)

n=0

for u in `echo $2|sed 's/,/ /g'`; do

if awk -F ':' '{print $1}' /etc/passwd | grep -qw "$u"; then

echo "the user $u exist"

else

useradd $u

echo -e "$u\n$u"|passwd $u >/dev/null 2>$1

echo "the user $u added successfully."

n=$[$n+1]

fi

done

if [ $n -eq 0 ]; then

exit 2

fi

;;

--del)

n=0

for u in `echo $3|sed 's/,/ /g'`; do

if awk -F ':' '{[print $1}' /etc/passwd|grep -qw "$u"

then

userdel -r $u

echo "The user $u deleted successfully."

n=$[$n+1]

else

echo "the user $u not exist."

fi

done

if [ $n -eq 0 ]; then

exit 3

fi

;;

--help)

echo -e "--add can add user,and the passwd is the same as username.It can add multiuser such as --add user1,user2..."

echo "--del cat delete user.it can delete user such as --del user1,user2..."

;;

*)

echo "use $0 --add username or $0 --del username or $0 --help"

exit 1

;;

esac

使用方法:在执行程序时 后面加上--add等

12.监控cpu使用率

#! /bin/bash

ip=`ifconfig -a |sed -n "2"p | awk '{print $2}'`

while :

do

idle=`top -bn1 | sed -n '3p' |awk -F ',' '{print $4}' | cut -d . -f1`

use=$[100-$idle]

if [ $use -gt 1 ]

then

echo "$ip is cpu usage rate greater ${use}%."

fi

sleep 2

done

每两秒输出1次cpu超过1%的警告

标签:tmp,do,shell,进阶,--,filename,done,echo
From: https://blog.csdn.net/weixin_64081179/article/details/141790731

相关文章

  • Shell编程:一篇讲透数组全知识点
    文章目录数组数组参数的使用$*$@$#数组展开示例数组定义方法数组包含的数据类型获取数组长度读取特定索引的值数组遍历数组切片数组替换删除数组追加数组元素插入数组元素向函数传递数组参数数组在Bash脚本中,数组是一种存储多个元素的变量结构,可以使用不同的......
  • Shell函数:递归函数、阶乘和函数库
    文章目录递归函数示例1:阶乘计算示例2:递归列出目录函数库递归函数递归是指函数在其内部调用自身。递归函数常用于解决像阶乘、斐波那契数列等问题。示例1:阶乘计算阶乘(Factorial)是数学中的一种运算,表示从1乘以2乘以3…直到某个数n的乘积,记作n!。例如:4!=1×2×......
  • shell基础(保姆式教学)
    1.helloworld#!/bin/bashecho"helloworld!"以上为shell的第一个脚本我们可以在目录中直接vimhello.sh(创建hello.sh,并编辑)输入i后开始编辑#!/bin/bash表示指定该脚本文件应该由哪个解释器来执行。echo表示输出编辑完成后,按ESC,输入wq,保存退出执行脚本可以使用:sh......
  • python进阶篇-day03-学生管理系统与深浅拷贝
    day03-学生管理系统-面向对象魔术方法:__dict__将对象的属性和属性值封装为字典用字典的值实例化对象:对象名(**字典)=>拆包student.py"""该文件记录的是:学生类的信息.​学生的属性如下: 姓名,性别,年龄,联系方式,描述信息"""​#1.定义学生类.......
  • Datawhale X 李宏毅苹果书 AI夏令营 深度学习进阶笔记02
    目录一、学习资料二、学习笔记(一)自适应学习率(adaptivelearningrate)1、什么是+为什么要用2、三种自适应学习率方法(1)AdaGrad(AdaptiveGradient)(2)RMSprop(RootMeanSquaredpropagation)(3)Adam(Adaptivemomentestimation)(二)学习率调度(learningratescheduling)1、为什么......
  • 白骑士的CSS高级篇之CSS Grid布局进阶 4.1.2 网格模板与区域
            CSSGrid布局是CSS中强大的布局系统之一,它提供了更灵活和更高效的方式来创建复杂的网页布局。通过Grid布局,你可以将网页划分为多个网格区域,并在这些区域中放置内容,这使得布局更加直观和易于维护。本文将深入探讨Grid布局中的网格模板和区域的概念,帮助你掌握如......
  • shell学习
    ⼀、简介1.1Shell环境Shell编程跟java、php编程⼀样,只要有⼀个能编写代码的⽂本编辑器和⼀个能解释执⾏的脚本解释器就可以了。Shell的解释器种类众多,常⻅的有:sh-即BourneShell。sh是Unix标准默认的shell。bash-即BourneAgainShell。bash是Linux标......
  • S32的进阶之路->8,S32DS的WDOG看门狗配置
    硬件:S32K144开发板软件:S32DS2.2 1,S32K144硬件连接说明    看门狗定时器时间到没有喂狗就会触发系统复位,反之定时时间内喂狗会正常工作,可以避免程序跑飞等软硬件问题。IO口分配情况如下,S32K144开发板具有3个按键和4个LED灯,具体与芯片的引脚连接情况如下所示。 *......
  • Goolge earth studio 进阶4——路径修改与平滑
    如果我们希望在大约中途时获得更多的城市鸟瞰视角。可以将相机拖动到这里并创建一个新的关键帧。camera_target_clip_7EarthStudio会自动平滑我们的路径,所以当我们通过这个关键帧时,不是一个生硬的角度,而是一个平滑的曲线。camera_target_clip_8路径上有贝塞尔控制......
  • shell(三剑客)
    正则表达式基本正则表达式元字符^行首定位符$行尾定位符.匹配任意单个字符(单个)*匹配前导符0到多次*和左侧的字符配合左侧字符可以出现0次到多次例如:grep"abc*"/tmp/123结果显示的是ababcabcd…….*任意多字符#会出现所有的内容[]匹配制定范围内的一个......