SHELL基础命令和语句

SHELL基础命令和语句


在这里插入图片描述

基础脚本实践

  • 创建本地yum仓库的脚本
#!/bin/bash

cd /etc/yum.repos.d
mkdir bak
mv *.repo bak
mount /dev/sr0 /mnt
touch local.repo

cat >> local.repo <<EOF
[local]
name=local
baseurl=file:///mnt
gpgcheck=0
EOF

yum clean all
yum makecache
  • 调用硬件信息(cpu,内存)
#!/bin/bash

cpu=`lscpu |grep 型号名称|awk '{print $1,$2,$3,$4,$5,$6}'`
echo cpu=$cpu
Memtotal=`free -h | grep Mem | awk '{print  $2}'`
echo Memtotal=$Memtotal 
Memused=`free -h | grep Mem | awk '{print  $3}'`
echo Memused=$Memused
Memfree=`free -h | grep Mem | awk '{print  $4}'`
echo Memfree=$Memfree
Memshared=`free -h | grep Mem | awk '{print  $5}'`
echo Memshared=$Memshared
Memavailable=`free -h | grep Mem | awk '{print  $7}'`
echo Memavailable=$Memavailable

基础命令

expr

expr命令是一个手工命令行计数器,用于在UNIX/LINUX下求表达式变量的值,一般用于整数值,也可用于字符串

  • expr 表达式

示例:

expr length “this is a test”				#计算字串长度
expr substr “this is a test” 3 5			#抓取字串
expr index "sarasara"  a					#抓取第一个字符数字串出现的位置
expr 1000 + 900								#整数运算

read

read命令用于从标准输入读取数值

read 内部命令被用来从标准输入读取单行数据。这个命令可以用来读取键盘输入,当使用重定向的时候,可以读取文件中的一行数据

read [选项]  名字
选项说明
-a后跟一个变量,该变量会被认为是个数组,然后给其赋值,默认是以空格为分割符
-d后面跟一个标志符,其实只有其后的第一个字符有用,作为结束的标志
-p后面跟提示信息,即在输入前打印提示信息
-e在输入的时候可以使用命令补全功能
-n后跟一个数字,定义输入文本的长度,很实用
-r屏蔽\,如果没有该选项,则\作为一个转义字符,有的话 \就是个正常的字符了
-s安静模式,在输入字符时不再屏幕上显示,例如login时输入密码
-t后面跟秒数,定义输入字符的等待时间
-u后面跟fd,从文件描述符中读入,该文件描述符可以是exec新开启的

示例:

#!/bin/bash

read -p "输入名字:" name
echo "你输入的名字是 $name" 
exit 0

bc

bc 命令是任意精度计算器语言,通常在linux下当计算器用(支持小数点运算)

  • bc 选项 参数
选项说明
+加法
-减法
*乘法
/除法
^指数
%余数
选项说明
-i强制进入交互式模式
-l定义使用的标准数学库
;或-w对POSIX bc的扩展给出警告信息
-q不打印正常的GNU bc环境信息
-v显示指令版本信息
-h显示指令的帮助信息

示例:

$ echo "15+5" | bc					#通过管道符
20

seq

是一个序列的缩写,主要用来输出序列化的东西

  • seq [选项] 首数 增量 尾数
选项说明
-f使用printf样式的浮点格式
-s使用指定字符串分隔数字(默认使用:\n)
-w在列前添加0 使得宽度相同[自动补位]

示例:

seq -w 1 10

awk

是一种处理文本文件的语言,是一个强大的文本分析工具

awk [选项参数] ‘script’ var=value file(s)

awk [选项参数] -f scriptfile var=value file(s)

选项说明
-F指定输入文件折分隔符,fs是一个字符串或者是一个正则表达式,如-F:。
-v赋值一个用户定义变量。
-f从脚本文件中读取awk命令。
-mf-mf选项限制分配给nnn的最大块数目
-mr-mr选项限制记录的最大数目

示例:

#!/bin/bash

#cpu
cpu=`top -b -n 1 | grep Cpu | awk '{print $8}'|cut -f 1 -d '.'`
echo cpu=$cpu

if [ $cpu -gt 20 ]
then
echo "cpu空闲率为$cpu,cpu正常"
else
echo "cpu空闲率为$cpu,cpu警告"
fi

echo "-------------------------------------------------------------------------------------------------"
#内存
Memtotal=`free -m | grep Mem | awk '{print  $2}'`
echo Memtotal=$Memtotal 
Memused=`free -m | grep Mem | awk '{print  $3}'`
echo Memused=$Memused
Memfree=`free -m | grep Mem | awk '{print  $4}'`
echo Memfree=$Memfree
Memshared=`free -m | grep Mem | awk '{print  $5}'`
echo Memshared=$Memshared
Memavailable=`free -m | grep Mem | awk '{print  $7}'`
echo Memavailable=$Memavailable

if [ $Memfree -le 3500 ]
then
echo "内存已使用$Memfree,内存容量正常,还可以放心使用"
else
echo "内存已使用$Memfree,内存容量警告"
fi

echo "-------------------------------------------------------------------------------------------------"
#磁盘
root=`df -h | grep centos-root |awk -F '[ %]+' '{print $5}'`
if [[ $root -lt 90 ]]
then
echo "根目录使用情况为$root,容量正常,还可以放心使用"
else
echo "根目录使用情况为$root,容量警告"
fi

home=`df -h | grep centos-home |awk -F '[ %]+' '{print $5}'`
if [[ $root -lt 90 ]]
then
echo "home目录使用情况为$home,容量正常,还可以放心使用"
else
echo "home目录使用情况为$home,容量警告"
fi

var=`df -h | grep centos-var |awk -F '[ %]+' '{print $5}'`
if [[ $var -lt 90 ]]
then
echo "var目录使用情况为$var,容量正常,还可以放心使用"
else
echo "var目录使用情况为$var,容量警告"
fi


sda=`df -h | grep sda2 |awk -F '[ %]+' '{print $5}'`
if [[ $sda -lt 90 ]]
then
echo "sda磁盘使用情况为$sda,容量正常,还可以放心使用"
else
echo "sda磁盘使用情况为$sda,容量警告"
fi

sed

sed [-hnV][-e<script>][-f<script文件>][文本文件]
参数说明
-e以选项中指定的script来处理输入的文本文件
-f以选项中指定的script文件来处理输入的文本文件
-h显示帮助
-n仅显示script处理后的结果
-v显示版本信息
选项说明
a新增
c取代
d删除
i插入
p打印
s取代

示例:

sed -e 4a\newLine testfile 

语句

if单分支语句

if [ 条件 ] then
语句
else
语句
fi

示例:(判断当前登录用户是否是root)

#!/bin/bash							

host=`whoami`

if [ $host = 'root' ]
then
echo "是root用户"
else
echo "不是root用户"
fi

示例:(判断时间)

#!/bin/bash

time=`date +%H`

if [ $time -ge 6 ] && [ $time -le 10 ]
then
echo "早上好" 
fi

if [ $time -ge 11 ] && [ $time -le 13 ]
then
echo "中午好"
fi

if [ $time -ge 14 ] && [ $time -le 18 ]
then
echo "下午好"
fi

if [ $time -ge 19 ] && [ $time -le 23 ]
then
echo "晚上好"
fi

if [ $time -ge 0 ] && [ $time -le 6 ]
then
echo "休息时间"
fi

if多分支语句

if [ 条件 ]
then
语句
elif
语句
fi

示例:(判断时间)

#!/bin/bash
time=`date +%H`

if [ $time -ge 6 ] && [ $time -le 10 ]
then
echo "早上好" 

elif [ $time -ge 11 ] && [ $time -le 13 ]
then
echo "中午好"

elif [ $time -ge 14 ] && [ $time -le 18 ]
then
echo "下午好"

elif [ $time -ge 19 ] && [ $time -le 23 ]
then
echo "晚上好"

else
echo "休息时间"
fi

case分支语句

case 值 in
模式1)
    command1
;;
模式2)
    command1
;;
*)
    command1
;;
esac

示例:(剪刀石头布小游戏)

#!/bin/bash
echo "现在开始进行石头剪刀布小游戏"
echo "请在下方输入1,2,3"
echo "1为石头,2为剪刀,3为布"

num=`echo $[RANDOM%3+1]`

read -p "输入你的数字: " you
case $you in
[1])
if [ 1 -eq $num ]
then
echo "平局"
elif [ 2 -eq $num ]
then
echo "你赢了"
else [ 3 -eq $num ]
echo "你输了"
fi
;;
[2])
if [ 1 -eq $num ]
then
echo "你输了"
elif [ 2 -eq $num ]
then
echo "平局"
else [ 3 -eq $num ]
echo "你赢了"
fi
;;
[3])
if [ 1 -eq $num ]
then
echo "你赢了"
elif [ 2 -eq $num ]
then
echo "你输了"
else [ 3 -eq $num ]
echo "平局"
fi
;;
esac

for循环语句

for循环的运作方式,是讲串行的元素意义取出,依序放入指定的变量中,然后重复执行含括的命令区域(在do和done 之间),直到所有元素取尽为止, 其中,串行是一些字符串的组合,彼此用$IFS所定义的分隔符(如空格符)隔开,这些字符串称为字段。

for 变量 in 串行
do
执行命令
done

示例:(ping网段)

#!/bin/bash
#ip="192.168.91."
for i in {1..254}
do
{
ping -c 3 192.168.91.$i &>/dev/null
if [ $? -eq 0 ]
#$? 上一次执行命令是否成功,成功为0,不成功为非0
then
echo $i主机通顺
else
echo $i主机不通顺
fi
}&
done
wait

while循环语句

while循环的条件测试是测真值

while 条件测试
do
执行命令
done

示例:(猜测价格)

#!/bin/bash
a=`echo $[RANDOM%1000+1]`
time=0
while true
do
read -p "请输入你猜的价格(1-1000):" b
let time++
if [ $a -eq $b ]
then
echo "恭喜你猜对了"
echo "你一共猜了 $time 次"
exit
elif [ $a -lt $b ]
then
echo "你猜的价格太高了"
else
echo "你猜的价格太低了"
fi
done

until循环语句

区别于while循环的条件测试是测真值,until循环则是测假值

until 条件测试
do
执行命令
done

示例:

#!/bin/bash
declare -i i=10
declare -i sum=0
until ((i>10))
do
let sum+=i
let ++i
done
echo $sum
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值