0


Shell脚本常用命令及如何通过shell脚本实现服务器上文件的上传和下载

Shell脚本常用命令

  1. 简介

1、什么是shell:
Shell 是一个用 C 语言编写的应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服务。Shell 脚本(shell script),是一种为 shell 编写的脚本程序,扩展名为.sh。
2、如何编写shell脚本:
文本编辑器(可以使用 vi/vim 命令来创建文件),新建一个文件 test.sh,扩展名为 sh(sh代表shell)如:
#!/bin/bash
echo “Hello World !”
3、常用的运行shell脚本方法:
将上面的代码保存为 test.sh,并 cd 到相应目录:
chmod +x ./test.sh #使脚本具有执行权限
./test.sh #执行脚本
详见:https://www.runoob.com/linux/linux-shell.html
二、常用命令
1、echo命令
echo string #输出字符串,双引号可以省略,效果一致

2、read命令
read默认就是从键盘读取用户输入的数据;如果进行了重定向,那么可以从文件中读取数据。

read -p “Please enter some information >” name url
echo “网站名字:

     n 
    
   
     a 
    
   
     m 
    
   
     e 
    
   
     " 
    
   
     e 
    
   
     c 
    
   
     h 
    
   
     o 
    
   
     " 
    
   
     网址: 
    
   
  
    name" echo "网址: 
   
  
name"echo"网址:url”


3、test命令
test 命令用于检查某个条件是否成立,它可以进行数值、字符和文件三个方面的测试。
1)、数值测试

num1=100
num2=100
if test ${num1} -eq ${num2}
then
echo ‘两个数相等’
else
echo ‘两个数不相等!’
fi
运行结果:

2)、字符串测试

str=“shell”
if test -z ${str}
then
echo ‘字符串为空’
else
echo ‘字符串不为空!’
fi
运行结果:

3)、文件测试

cd E:/zs
if test -e ./test
then
echo ‘文件存在!’
else
echo ‘文件不存在!’
fi
运行结果:

4、expr求值命令
a=10
b=20
val=

expr $a + $b

echo “a+b:$val”
运行结果:

注意:表达式和运算符之间要有空格;完整的表达式要被 包含,注意这个字符不是常用的单引号,在 Esc 键下边。

5、文件和目录操作
1)、创建空文件:touch filename
2)、删除文件:rm filename
3)、创建目录:mkdir directoryname
4)、删除空目录:rmdir directoryname
5)、删除非空目录:rm -rf directoryname
6)、复制文件或目录:cp source destination
-a:保留链接和文件属性,递归拷贝目录
-i:若目标档(destination)已经存在时,在覆盖时会先询问动作的进行
-p:连同文件的属性一起复制过去,而非使用默认属性(备份常用)
-r:递归持续复制,用於目录的复制行为
-v:显示复制进度
Eg:复制test目录到1目录,覆盖询问,显示进度。

7)、文件重命名:mv file1 file2(file1改名为file2)
6、查看文件内容
1)、cat:由第一行开始显示文件内容
2)、tac:从最后一行开始显示,可以看出 tac 是 cat 的倒着写
3)、nl:显示的时候,顺道输出行号
4)、more:一页一页的显示文件内容
5)、less 与 more 类似,但是比 more 更好的是,他可以往前翻页
6)、head:只看头几行,默认显示10行,-n后面接数字,代表显示几行
7)、tail:只看尾巴几行,与head用法相似

7、结构化命令
1)、if-then语句:
a=10
b=20
if [ $a == $b ]
then
echo “a 等于 b”
elif [ $a -gt $b ]
then
echo “a 大于 b”
elif [ $a -lt $b ]
then
echo “a 小于 b”
else
echo “没有符合的条件”
fi
运行结果:

2)、for循环
for 变量 in 值集合
do
命令
done

for((a;b;c)) a:初始化循环体;b:判断条件;c改变循环体变量值
do
命令
done

3)、while
int=1
while(( $int<=5 ))
do
echo $int
let “int++”
done

4)、case…esac
str=“google”
case $str in
“baidu”) echo “百度一下”
;;
“google”) echo “Google 搜索”
;;
esac

**8、输入/输出重定向**

while read str
do
echo $str
done <data.txt >>log.txt #从data.txt读取读取内容,然后将输出不覆盖写入到log.Txt中。
9、管道
管道符|将命令与命令连接起来,用第二个命令来接收第一个命令的输出
cat data.txt | while read str
do
echo $str
done

10、获取计算机相关信息
#!/bin/bash
ip=

ifconfig eth0 |grep "inet" |awk '{print $2}'| grep 192.168

cpu_info=

cat /proc/cpuinfo|grep "model name"|tail -l |cut -d: -f 2 |sed 's/^//g'|awk '{print $1,$3,$4,$NF}'|uniq

cpu_num=

cat /proc/cpuinfo|grep "physical id"|sort|uniq -c|wc -l

disk_info=

fdisk -l|grep "Disk"|grep -v "identifier"|awk '{print $2,$3,$4}'|sed 's/,//g'

mem_info=

free -m |grep "Mem" |awk '{print "Total",$1,$2"M"}'

load_info=

uptime|awk '{print "current Load:" $(NF-2)}'|sed 's/,//g'

function host_info(){
echo -e “\033[32m ############# get host info list###########\033[0m”
echo “ip:

      i 
     
    
      p 
     
    
   
     " 
    
   
     e 
    
   
     c 
    
   
     h 
    
   
     o 
    
   
     " 
    
   
     c 
    
   
     p 
    
    
    
      u 
     
    
      i 
     
    
   
     n 
    
   
     f 
    
   
     o 
    
   
     : 
    
   
  
    {ip}" echo "cpu_info: 
   
  
ip"echo"cpui​nfo:{cpu_info}”

echo “cpu_num:

      c 
     
    
      p 
     
     
     
       u 
      
     
       n 
      
     
    
      u 
     
    
      m 
     
    
   
     " 
    
   
     e 
    
   
     c 
    
   
     h 
    
   
     o 
    
   
     " 
    
   
     d 
    
   
     i 
    
   
     s 
    
    
    
      k 
     
    
      i 
     
    
   
     n 
    
   
     f 
    
   
     o 
    
   
     : 
    
   
  
    {cpu_num}" echo "disk_info: 
   
  
cpun​um"echo"diski​nfo:{disk_info}”

echo “mem_info:

      m 
     
    
      e 
     
     
     
       m 
      
     
       i 
      
     
    
      n 
     
    
      f 
     
    
      o 
     
    
   
     " 
    
   
     e 
    
   
     c 
    
   
     h 
    
   
     o 
    
   
     " 
    
   
     l 
    
   
     o 
    
   
     a 
    
    
    
      d 
     
    
      i 
     
    
   
     n 
    
   
     f 
    
   
     o 
    
   
     : 
    
   
  
    {mem_info}" echo "load_info: 
   
  
memi​nfo"echo"loadi​nfo:{load_info}”

}
host_info
echo “ip地址,cpu信息, cpu个数, 硬盘信息, 内存信息 ,负载信息” >> host_info.csv
echo “

      i 
     
    
      p 
     
    
   
     , 
    
   
  
    {ip}, 
   
  
ip,{cpu_info}, 
 
  
   
    
    
      c 
     
    
      p 
     
     
     
       u 
      
     
       n 
      
     
    
      u 
     
    
      m 
     
    
   
     , 
    
   
  
    {cpu_num}, 
   
  
cpun​um,{disk_info}, 
 
  
   
    
    
      m 
     
    
      e 
     
     
     
       m 
      
     
       i 
      
     
    
      n 
     
    
      f 
     
    
      o 
     
    
   
     , 
    
   
  
    {mem_info}, 
   
  
memi​nfo,{load_info}” >> host_info.csv

11、获取随机字符串或数字
echo $RANDOM|md5sum |cut -c 1-8 #随机获取8位字符串
echo KaTeX parse error: Expected 'EOF', got '#' at position 30: …cut -c 1-8 #̲随机获取8位数字 **12、检…(curl -o /dev/null --connect-timeout 3 -s -w “%{http_code}” $1
)
if [ $HTTP_CODE -ne 200 ]; then
echo “Warning: $1 Access failure!”
else
echo “网站正常”
fi
}
check_url www.baidu.com
13、从FTP服务器下载文件
#!/bin/bash
ftp=ftp.cocos.org
username=QA-test
password=Test123456
dir=‘/QATeam/3D-Demo/3.2.0’
file=‘F:\test’
ftp -n -v << EOF
open $ftp
user $username $password
binary
cd $dir #ftp路径
lcd $file #下载到本地路径
prompt
get test-case-3d.zip #下载单个文件,mget *下载全部文件
bye
EOF
echo 下载完成!
14、上传文件到FTP服务器
#!/bin/bash
ftp=ftp.cocos.org
username=QA-test
password=Test123456
dir=‘/QATeam/test/hhq’
file=‘F:\test’
ftp -n -v << EOF
open $ftp
user $username $password
binary
cd $dir #ftp路径
lcd $file #下载到本地路径
prompt
put log.txt #上传单个文件,mput *上传全部文件
bye
EOF
echo 上传成功!
15、监控cpu使用率
#!/bin/bash
while :
do
idle=

top -bn1 |sed -n '3p' |awk '{print $5}'|cut -d . -f1

use=

     [ 
    
   
     100 
    
   
     − 
    
   
  
    [100- 
   
  
[100−idle]

if [ $use -gt 90 ]
then
echo “cpu use percent too high.”
fi
sleep 10
done
16、文件压缩解压
zip -r /mnt/f/test/1.zip /mnt/f/test
unzip /mnt/f/test/1.zip
17、安装nginx

卸载旧的nginx

sudo apt remove nginx nginx-common nginx-full nginx-core

进入目录

$ sudo cd /etc/apt

备份源文件

$ sudo cp cp sources.list sources.list.bak

编辑源文件

$ sudo vim sources.list

文件末尾添加以下两行并保存

deb http://nginx.org/packages/mainline/ubuntu/ bionic nginx
deb-src http://nginx.org/packages/mainline/ubuntu/ bionic nginx

导入nginx公钥

sudo wget http://nginx.org/keys/nginx_signing.key
sudo apt-key add nginx_signing.key

安装 nginx

sudo apt-get update
sudo apt-get install nginx

设置开机启动

systemctl start nginx
systemctl enable nginx
18、按日期备份文件
NOW=

     ( 
    
   
     d 
    
   
     a 
    
   
     t 
    
   
     e 
    
   
     + 
    
   
     " 
    
   
     F 
    
   
     I 
    
   
     L 
    
   
     E 
    
   
     = 
    
   
     " 
    
   
     b 
    
   
     a 
    
   
     c 
    
   
     k 
    
   
     u 
    
   
     p 
    
   
     . 
    
   
  
    (date +"%m-%d-%Y") # 当前日期 FILE="backup. 
   
  
(date+"FILE="backup.NOW.tar.gz" # 备份文件名

echo "Backing up data to /tmp/KaTeX parse error: Expected 'EOF', got '#' at position 29: …ease wait..." #̲打印信息 tar xcvf …FILE /mnt/f/test/ # 备份文件夹到指定tar压缩文件中
echo “备份完成”


本文转载自: https://blog.csdn.net/longerqingqia22/article/details/129110449
版权归原作者 longerqingqia22 所有, 如有侵权,请联系我们删除。

“Shell脚本常用命令及如何通过shell脚本实现服务器上文件的上传和下载”的评论:

还没有评论