首页 > 系统相关 >跟着马哥一起学习linux---bash脚本

跟着马哥一起学习linux---bash脚本

时间:2022-10-24 15:14:55浏览次数:52  
标签:马哥 sum echo --- done bash linux root localhost

数值测试

-f  判断文件是否存在 eg: if [ -f filename ]
-d  判断目录是否存在 eg: if [ -d dir     ]
-gt 是否大于
-ge 是否大于等于
-eq 是否等于
-ne 是否不等于
-lt 是否小于
-le 是否小于等于
-a 双方都成立(and) 逻辑表达式 –a 逻辑表达式
-o 单方成立(or) 逻辑表达式 –o 逻辑表达式
-z 空字符串
‐z 可以判断一个变量是否为空

大小写转换

大写转小写

[root@131 shell]# echo AAABBBCCCdddeeeffgh123 |tr A-Z a-z
aaabbbcccdddeeeffgh123

小写转大写

[root@131 shell]# echo AAABBBCCCdddeeeffgh123 |tr a-z A-Z
AAABBBCCCDDDEEEFFGH123

取文件的第一列
cat /etc/passwd |cut -d: -f1
取第六列

cat /etc/passwd |cut -d: -f6
for line in $(cat /etc/passwd);do   name=$(echo $line |cut -d: -f1); home=$(echo $line |cut -d: -f6); echo $name的家目录是$home;done

调试脚本
bash -n 脚本名称
检测IP是否合法并测试ip通断

#!/bin/bash
​
read -p "pleash input a ip:" IP
if ! [[ "$IP" =~ ^(([1-9]?[0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([1-9]?[0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$ ]];then
  echo "IP is invalid "
  exit
elif ping -c1 -W1 $IP &> /dev/null ;then
    echo "$IP is up "
else
    echo "$IP is down "
fi

yes or no case用法

#!/bin/bash
read -p "do you marry me? yes or no:" ANS
​
case $ANS in
[Yy]|[Yy][Ee][Ss])
   echo AMD
   ;;
[Nn]|[Nn][Oo])
   echo Intel
  ;;
*)
   echo INPUT error
   exit
esac

文件后缀的判断

#!/bin/bash
read -p "please input a file:" FILE
​
​
SUFFIX=`echo $FILE | grep -Eo "[^.]+$"`
case $SUFFIX in
gz)
   echo gzip
   ;;
bz2)
   echo bzip2
   ;;
xz)
   echo xz
   ;;
Z)
   echo compress
   ;;
zip)
   echo zip
   ;;
*)
   echo other
   ;;
esac

计算1到100相加的值

[root@localhost ~]# seq -s+ 100 |bc
5050
​
[root@localhost ~]# echo {1..100}|tr ' ' +|bc
5050
[root@localhost ~]# seq 100|paste -sd +|bc
5050
​
[root@localhost ~]# sum=0;for i in {1..100};do let sum+=i;done ;echo sum=$sum
sum=5050

计算1到100奇数的合

[root@localhost ~]# sum=0;for i in echo {1..100..2};do let sum+=i;done; echo sum=$sum
sum=2500
[root@localhost ~]# seq -s+ 1 2  100 |bc
2500
[root@localhost ~]# echo {1..100..2}|tr ' ' + |bc
2500
echo $sum
脚本
#!/bin/bash
sum=0
for i in {1..100};do
   if [ $[i%2] -eq 0 ];then continue;fi
   let sum+=i
done

计算1到100偶数的合

[root@localhost ~]# echo {2..100..2}|tr ' ' + |bc
2550
[root@localhost ~]# seq -s+ 2 2  100 |bc
2550
[root@localhost ~]# sum=0;for i in echo {2..100..2};do let sum+=i;done; echo sum=$sum
sum=2550

创建用户10个用户并随机密码

#!/bin/bash
for i in {1..10};do
  useradd user$i
  PASS=`cat /dev/urandom |tr -dc '[:alnum:]'|head -c 12`
  echo $PASS |passwd --stdin user$i &> /dev/null
  echo user$i:$PASS >> /root/user.log
  echo "user$i is created"
done

删除passwd文件中user开头的用户

for i in  `cat /etc/passwd |grep ^user|cut -d: -f1  `;do userdel  $i;done
删除user1~user10用户
for i in {1..10};do userdel -r user$i;done

99乘法表

[root@localhost ~]# cat 99.sh
#!/bin/bash
for i in {1..9};do
  for j in `seq $i`;do
    echo -e "${j}*${i}=$[j*i]\t\c"
  done
  echo
done
[root@localhost ~]# bash 99.sh
1*1=1
1*2=2  2*2=4
1*3=3  2*3=6  3*3=9
1*4=4  2*4=8  3*4=12  4*4=16
1*5=5  2*5=10  3*5=15  4*5=20  5*5=25
1*6=6  2*6=12  3*6=18  4*6=24  5*6=30  6*6=36
1*7=7  2*7=14  3*7=21  4*7=28  5*7=35  6*7=42  7*7=49
1*8=8  2*8=16  3*8=24  4*8=32  5*8=40  6*8=48  7*8=56  8*8=64
1*9=9  2*9=18  3*9=27  4*9=36  5*9=45  6*9=54  7*9=63  8*9=72  9*9=81

批量修改文件后缀

for file in * ;do  mv $file $file.bak;done
修改文件名后缀脚本

#!/bin/bash
DIR=/root/testdir
​
cd $DIR
for FILE in * ;do
#  PRE=`echo $FILE|rev|cut -d. -f 2- |rev`
  PRE=`echo $FILE| grep -Eo ".*\."`
  mv $FILE $PRE.bak
done

ping某个网段哪些IP畅通

for循环第一种写法

#!/bin/bash
NET=192.168.160
cat /dev/null > hosts.txt
for i in {1..254} ;do
 if  ping -c1 -W1 $NET.$i &>/dev/null;then
     echo $NET.$i is up |tee -a hosts.txt
 fi
done

for循环第二种写法

#!/bin/bash
NET=192.168.160
​
​
cat /dev/null > hosts1.txt
​
​
for ((i=1;i<=254;i++));do
  if  ping -c1 -W1 $NET.$i &> /dev/null;then
      echo $NET.$i is up |tee -a hosts1.txt
  fi
done

while循环

扫描主机IP端口状态脚本

#!/bin/bash
i=1
host=192.168.160.141
​
​
while [ $i -le 65535 ];do
    if nc -z $host $i  &>/dev/null ;then
     echo $i |tee -a port.txt
  fi
  let i++
done

取文件第二行计算相加的值

cut -d " " -f2  student.txt |paste -s  -d +|bc
脚本
#!/bin/bash
while read student ;do
  age=`echo $student |cut -d" " -f2`
  let sum+=age
done < student.txt
echo $sum

检查磁盘使用率

#!/bin/bash
waring=10
df | sed -rn '/^\/dev\/sd/s#.* ([0-9]+)%.*#\1#p' |while read use;do
 if [ $use -gt $waring ];then
   echo $use
​
​
fi
done

while循环每10s输出一次磁盘使用率

#!/bin/bash
waring=10
while true;do
    df | sed -rn '/^\/dev\/sd/s#.* ([0-9]+)%.*#\1#p' |while read use;do
        if [ $use -gt $waring ];then
          echo $use
     fi
    done
  sleep 10
done

continue:跳过某次循环
案例1

#!/bin/nash
for i in {1..10};do
    if [ $i -eq 5 ];then continue ;fi
    echo $i
done

案例2

#!/bin/bash
sum=0
for i in {1..100};do
   if [ $[i%2] -eq 0 ];then continue;fi
   let sum+=i
done
echo $sum

break:结束本次循环

#!/bin/nash
for i in {1..10};do
    if [ $i -eq 5 ];then break ;fi
    echo $i
done

shift:用于将参量列表list左移指定次数;

bash user.sh  a b c d 
​
​
#!/bin/bash
while [ "$1" ] ;do
   useradd $1  && echo $1 is created
   shift
done
[root@localhost data]# bash user.sh a b c d
a is created
b is created
c is created
d is created

select

[root@localhost ~]# PS3="选择一个菜品:"
[root@localhost ~]#
[root@localhost ~]# select m in 回锅肉 小炒肉 佛跳墙 ;do echo $m;done
1) 回锅肉
2) 小炒肉
3) 佛跳墙
选择一个菜品:2
小炒肉
选择一个菜品:3
佛跳墙
选择一个菜品:1
回锅肉
选择一个菜品:

脚本

#!/bin/bash
sum=0
PS3="请点菜:"
select M in 北京烤鸭 佛跳墙 小龙虾 羊蝎子 火锅 点菜结束;do
case $REPLY in
1)
  echo $M 价格是 ¥100
  let sum+=100
  ;;
2)
  echo $M 价格是 ¥88
  let sum+=88
  ;;
3)
  echo $M 价格是 ¥66
  let sum+=66
  ;;
4)
  echo $M 价格是 ¥100
  let sum+=100
  ;;
5)
  echo $M 价格是 ¥200
  let sum+=200
  ;;
6)
  echo "点菜结束"
  break
  ;;
*)
esac
done
echo "总价格是:$sum"

执行结果

[root@localhost data]# bash select.sh
1) 北京烤鸭
2) 佛跳墙
3) 小龙虾
4) 羊蝎子
5) 火锅
6) 点菜结束
请点菜:1
北京烤鸭 价格是 ¥100
请点菜:2
佛跳墙 价格是 ¥88
请点菜:5
火锅 价格是 ¥200
请点菜:6
点菜结束
总价格是:388

函数

[root@localhost data]# hello () { echo hello world;echo function; }
[root@localhost data]#
​
​
[root@localhost data]# hello
hello world
function

函数初始化系统脚本

#!/bin/bash
#关闭selinux
disable_selinux () {
   sed -i '/^SELINUX=/c SELINUX=disabled' /etc/selinux/config
}
#关闭防火墙
disable_firewalld () {
   systemctl disable --now  firewalld
}
#支持光盘
set_cdrom () {
 yum -y install autofs
 systemctl enable --now autofs
}
#配置yum仓库
yum_config () {
  mkdir /etc/yum.repos.d/backup
  mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/backup
  cat >  /etc/yum.repos.d/base.repo <<EOF
[base]
name=CentOS-/\$releasever - Base - mirrors.aliyun.com
failovermethod=priority
baseurl=http://mirrors.aliyun.com/centos/\$releasever/os/\$basearch/
        http://mirrors.aliyuncs.com/centos/\$releasever/os/\$basearch/
        http://mirrors.cloud.aliyuncs.com/centos/\$releasever/os/\$basearch/
gpgcheck=1
gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7
EOF
}
#修改网卡名称
config_network () {
mv  /etc/sysconfig/network-scripts/ifcfg-ens33 cat /etc/sysconfig/network-scripts/ifcfg-eth0 
sed -i 's/ens33/eth0/g'  /etc/sysconfig/network-scripts/ifcfg-eth0 
 sed -ri '/GRUB_CMDLINE_LINUX=/s#(.*)"$#\1 net.ifnames=0"#' /etc/default/grub
 grub2-mkconfig -o /boot/grub2/grub.cfg
​
}
#安装常用包
install_packages () {
yum -y install autofs wget
}
#修改环境
set_env () {
cat >/etc/profile.d/env.sh <<EOF
PS1="\[\e[1;34m\]# \[\e[1;36m\]\u \[\e[1;0m\]@ \[\e[1;32m\]\h \[\e[1;0m\]in \[\e[1;33m\]\w \[\e[1;0m\][\[\e[1;0m\]\t\[\e[1;0m\]]\n\[\e[1;31m\]$\[\e[0m\] "
export EDITOR=vim
export HISTTIMEFORMAT="[%F %T]"
EOF
}
​
​
disable_selinux
disable_firewalld
set_cdrom
yum_config
config_network
install_packages
set_env
reboot

临时文件或者临时目录
临时文件

root@localhost ~]# mktemp testXXXXX
testdVQFV

临时目录

[root@localhost ~]# mktemp -d testXXXX
testrgE0

脚本

#!/bin/bash
DIR=`mktemp -d /tmp/trash-$(date +%F_%T-%M-%S)XXXXX`
mv $* $DIR
echo $* is move to $DIR
####
alias rm=/data/temp.sh
#####
chmod +x /data/temp.sh
####
[root@localhost ~]# rm hosts1.txt
hosts1.txt is move to /tmp/trash-2022-10-21_17:41:48-41-48odi1T
#####
执行结果
[root@localhost ~]# cd /tmp/
[root@localhost tmp]# ls
systemd-private-e845e2add17940df8a05dccd32ee2d5e-bolt.service-5l2aiG          vmware-root_6524-701075127
systemd-private-e845e2add17940df8a05dccd32ee2d5e-chronyd.service-GEMHRs       vmware-root_6525-1715344745
systemd-private-e845e2add17940df8a05dccd32ee2d5e-colord.service-G4Hj6V        vmware-root_6528-692621236
systemd-private-e845e2add17940df8a05dccd32ee2d5e-cups.service-O6hoCO          vmware-root_6546-734103590
systemd-private-e845e2add17940df8a05dccd32ee2d5e-rtkit-daemon.service-glsSQx  vmware-root_6548-734234657
trash-2022-10-21_17:41:48-41-48odi1T                                          vmware-root_6563-1714820560
[root@localhost tmp]# cd trash-2022-10-21_17\:41\:48-41-48odi1T/
[root@localhost trash-2022-10-21_17:41:48-41-48odi1T]# ls
hosts1.txt
####

一条命令实现
function rm () { local trash=mktemp -d /tmp/trashXXXX;mv $* $trash; }

标签:马哥,sum,echo,---,done,bash,linux,root,localhost
From: https://www.cnblogs.com/xiaozhang1995/p/16821490.html

相关文章

  • Netty进阶-黏包半包分析
    Netty进阶1、黏包服务端//测试黏包服务端@Slf4jpublicclassTestNianbaoServer{publicstaticvoidmain(String[]args){NioEventLoopGroupboss=......
  • Netty进阶-黏包半包解决方案
    4、解决方案4.1、短连接以解决黏包为例。服务端同上,客户端如下//短连接处理黏包,发送后关闭publicclassTestSloveNianbaoClient{publicstaticvoidmain(Strin......
  • Netty进阶-协议
    5.1、Redis协议//redis协议测试publicclassTestRedis{publicstaticvoidmain(String[]args){finalbyte[]line={13,10};NioEventLoop......
  • 拆解:AFEM-8231和SKY58290-20前端模块 苹果iPhone 14Pro Max
    近期,iFixit对苹果最新iPhone14的拆解终于完成了,认为这次iPhone14最值得点赞的不是更强的处理器,也不是卫星SOS功能和更大的摄像头,而是完全重新设计的内部结构——显示面......
  • Netty入门-ButeBuf
    3.5、ByteBuf3.5.1、创建//结果:初始容量256,扩容到512//PooledUnsafeDirectByteBuf(ridx:0,widx:0,cap:256)//PooledUnsafeDirectByteBuf(ridx:0,widx:300,cap......
  • Netty入门-Future & Promise
    3.3、Future&PromiseNetty中的Future与Jdk中Future同名,但是是两个接口,继承关系:Promise---extends-->Future(Netty)-----extend--->Future(JDK)区别:jdkFuture只能......
  • 不依赖SDK的获取OAID -- OAIDHelper
    OAIDHelperOAID作为广告标识符,在OAID_SDK_1.0.25版本及以前支持直接使用,但1.0.25版本支持的设备覆盖不够全面,1.0.26版本及以后需要根据应用包名申请证书文件,且需要企业认......
  • Netty入门-Handler & Pipeline
    3.4、Handler&PipelineChannelHandler用来处理Channel上的各种事件,分为入站、出站两种。所有ChannelHandler被连成一串,就是Pipeline入站处理器通常是ChannelIn......
  • 熟悉javaweb过程中遇到的问题-01
    Cause:org.apache.ibatis.builder.BuilderException:ErrorparsingSQLMapperConfiguration.Cause:org.apache.ibatis.builder.BuilderException:Errorcreatingd......
  • Electron-Hello World
    Electron 是什么 Electron 是一个可以创建桌面应用程序的框架。安装全局安装:npminstallelectron。创建应用创建空文件夹作为 demo 的根目录,然后创建index.htm......