Shell脚本常用命令
简介
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(( $intlog.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"cpuinfo:{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:
cpunum"echo"diskinfo:{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:
meminfo"echo"loadinfo:{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},
cpunum,{disk_info},
m
e
m
i
n
f
o
,
{mem_info},
meminfo,{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 |