Shell脚本

Shell 脚本

1
2
3
4
5
6
7
8
#!/bin/bash  # #!脚本声明

# file   # 脚本说明

ls  # 功能
pwd
reboot

逻辑判断

1
2
3
4
5
6
7
 [ $USER = root ] && echo "you are admin" || echo "you are user"
# [   ] 逻辑判断,前后均有空格  
# && 为 与 运算
# || 为 或 运算
[ `free -m | grep Mem: | awk '{print $4}'` -lt 1024 && echo "buzu" || echo "chongzu"
# 判断空闲内存是否充足

文件测试所用的参数

运算符 作用
-d 测试文件是否为目录类型
-e 测试文件是否存在
-f 判断是否为一般文件
-r 测试当前用户是否有权限读取
-w 测试当前用户是否有权限写入
-x 测试当前用户是否有权限执行

可用的整数比较运算符

操作符 作用
-eq 是否等于
-ne 是否不等于
-gt 是否大于
-lt 是否小于
-le 是否等于或小于
-ge 是否大于或等于

常见的字符串比较运算符

操作符 作用
= 比较字符串内容是否相同
!= 比较字符串内容是否不同
-z 判断字符串内容是否为空

ping

取ip地址

1
2
3
ping -c 1 linuxcool.com | grep from | cut -d " " -f 4
# -c 几次
# -i 间隔多少秒

vim ping.sh

1
2
3
4
5
6
7
#!/bin/bash
ping -c 3 -i 0.2 -W 3 $1 >> /dev/null
if [ $? -eq 0 ] ;  then
echo "$1 is On-line"
else
echo "$1 is Off-line"
fi

bash ping.sh 163.com

判断成绩

vim test.sh

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
#!/bin/bash

read -p "Please input your grade:" GRADE

if [ $GRADE -ge 85 ] && [ $GRADE -le 100 ]; then
    echo "$GRADE is Great!"
elif [ $GRADE -ge 70 ] && [ $GRADE -lt 85 ]; then
    echo "$GRADE is Pass."
else
    echo "$GRADE is Fail."
fi

bash test.sh

猜大小

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
#!/bin/sh
PRICE=$( expr $RANDOM % 1000 )
TIMES=0
while true
do
read -p "Guess a INT number:" INT
let TIMES++
if [ $INT -eq $PRICE ]; then
        echo "You are right:$INT"
        echo "Guess $TIMES times"
        exit 0
elif [ $INT -gt $PRICE ]; then
        echo "High"
else
        echo "Low"
fi
done

Case

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
#!/bin/bash
read -p "Enter:" KEY
case $KEY in
[a-z]|[A-Z])
echo "Zimu"
;;
[0-9])
echo "Number"
;;
*)
echo "Error"
esac

一次性任务

1
2
3
4
5
at 20:30
systemctl restart httpd
#按Ctrl+D结束编写任务
at -l #查看任务列表
atrim 任务序号 #删除任务

长期任务

1
2
3
4
5
6
7
8
crontab -l # 查看任务列表
crontab -e #创建任务
# 分 时 日 月 星期 命令
25 3 * * 1,3,5 /usr/bin/tar -czvf backup.tar.gz /home/wwwroot
# 每周1、3、5,3:25,备份
0 */2 * * 1-5 /usr/bin/rm -rf /tmp/*
# 周一到周五,每隔两个小时,清空/tmp

kvm-arm64

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
#!/bin/bash

ISOURL=$1
rm -rf /home/sandy/arm64.qcow2
qemu-img create -f qcow2 /home/sandy/arm64.qcow2 20G

virsh undefine arm64 --nvram

install_from_iso_vga_UOS() {
virt-install -n arm64 --memory 2048 --arch aarch64 --vcpus 2 \
     --disk /home/sandy/arm64.qcow2,device=disk,bus=virtio \
     --os-type=generic \
     --boot uefi \
     --video vga \
     --noautoconsole \
     --noreboot \
     --cdrom $ISOURL
}
install_from_iso_vga_UOS

写入多行文本到文件

1
2
3
4
cat >/etc/product-info <<EOF
## cat >>为追加
UOS device Enterprise V20 $(uname -m) $(date +%Y%m%d)
EOF

选择执行

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#!/bin/bash
echo ""
echo " 1: ssh 访问 自动构建服务器  "
echo " 2: ssh 访问 UOS ISO存储服务器   "
echo " 3: 浏览器打开 UOS ISO存储服务器   "
echo " 4: 上传UOS ISO镜像到存储服务器"
echo " 5: 打开 虚拟机管理器virt-manager"
echo " 6: ssh 访问 my vps"

echo ""
read -p "Please input the choice:"  idx
##定义函数
sync_upload_iso(){
echo "input the iso url: "
read ISOURL
rsync -avz --progress $ISOURL -e ssh [email protected]:/data/iso/uos/device/snapshots/
if [[ $ISOURL =~ "iso" ]]; then 
#    sudo apt install rsync -y
    rsync -avz --progress $ISOURL -e ssh [email protected]:/data/iso/uos/device/snapshots/
fi
}
#if [[ -z "$idx"]];then
#  echo "no choice,exit"
if [[ '1' = "$idx" ]];then
  eval "ssh [email protected] -t 'cd /data/soft/isobuilder/; bash --login'"
elif [[ '2' = "$idx" ]];then
  eval "ssh [email protected] -t 'cd /data/iso/uos/; bash --login'"
elif [[ '3' = "$idx" ]];then
  eval "xdg-open 'http://ip'"
elif [[ '4' = "$idx" ]];then
  eval "sync_upload_iso"
elif [[ '5' = "$idx" ]];then
  eval "virt-manager"
elif [[ '6' = "$idx" ]];then
  eval "ssh [email protected] -p 22"
else
  echo "no choice,exit!"
fi
echo ""

点击刷新