一、查看IP的命令
ip addr
ip a
二、shell命令执行的时候传递参数
1、编写shell命令
#放在shell文件中
echo "第一个参数: $1";
echo "第二个参数:$2";
执行命令:
sh demo.sh 参数1 参数2
输出的结果为:
第一个参数: 参数1
第二个参数:参数2
注意:注意区分a 和 a和a和{a},区别是如果后面有拼接字符的话使用${a}
2、shell常见参数
$? #判断上一条命令执行的是否成功
$0 #返回脚本的文件名称
$1-$9 #返回对应的参数值
$* #返回所有的参数值是什么
$# #返回参数的个数和
三,shell常见的符号
1、>会覆盖原有的内容
aaa>a.txt aaa覆盖掉a.txt中的文本
2、>>不会覆盖原有的内容
3、; /#执行多条命令
4、| /#管道符
cat a.txt | grep 'aaaaaaaaaa'
含义:把|前面的结果交给|后面来处理
5、&& /#前面的命令执行成功,后面的才可以执行
6、|| /#前面的命令执行失败,后面的才可以执行
7、"" /#会输出变量值
8、’’ /#输出本身
9、`` /#输出命令结果 eg:a=date
;echo $a
10、2>/dev/null /#错误输出到无底洞
11、1>/dev/null /#正确输出到无底洞
三、常见的判断
1、语法:[ 判断表达式 ]
1.1、文件(夹)或者路径:
1.1.1、-e 目标是否存在(exist)
实例1:
[ -e a.sh ] && '存在'
实例2:
[ -e a.sh ] || '不存在'
1.1.2、-d 是否为路径(directory)
实例1:
[ -e /a/b/c ] && '存在'
实例2:
[ -e /a/b/c ] || '不存在'
1.1.3、-f 是否为文件(file)
注意:
[ -e foer.sh ] || touch foer.sh /#判断当前目录下是否有foer.sh这个文件,假如没有就创建出foer.sh文件
2、权限:
2.1、-r 是否有读取权限(read)
2.2、-w 是否有写入权限(write)
2.3、-x 是否有执行权限(excute)
[ -x 123.txt ] && echo ‘有执行权限’
3、整数值(int型):
3.1、-eq 等于(equal)
3.2、-ne 不等于(not equal)
3.3、-gt 大于(greater than)
3.4、-lt 小于(lesser than)
3.5、-ge 大于或者等于(greater or equal)
3.6、-le 小于或者等于(lesser or equal)
[ 9 -gt 8 ] && echo ‘大于’
4、小数(浮点型):
[ `echo '1.2 < 1.3' | bc` -eq 1 ] && echo '小于'
注意:我们这里使用的是bc计数器
如果:a>b不成立那么会返回0,如果成立那么会返回1
5、字符串:
= 相等
!= 不相等
[ 'kkkkk' != 'kkkk' ] && echo '不等于'
实战1:
if [ $1 -eq $2 ]
then
echo "$1等于$2"
else
echo "$1不等于$2"
fi
实战2:
touch $1
if [ $? -eq 0 ]
then
echo "创建成功"
else
echo "创建失败"
fi
四、shell脚本输入之read命令
语法:read -参数
1、-p:给出提示符。默认不支持"\n"换行
实例:
read -p "请输入密码:" pass
echo $pass
2、-s:隐藏输入的内容
实例:
read -s -p "请输入密码:" pass
echo ""
echo "您输入的密码为:$pass"
注意:-s要加在-p的前面
3、-t:给出等待的时间,超时会退出read
实例:
read -t 5 -s -p "请输入密码:" pass
echo ""
echo "您输入的密码为:$pass"
效果:5s后自动退出
4、-n:限制读取字符的个数,触发到临界值会自动执行
实例:
read -n 5 -p "请输入密码:" pass
echo ""
echo "您输入的密码为:$pass"
效果:输入5个字符后自动结束
注意:
echo "请输入密码:"
read pass
五、shell脚本输出上色
语法: echo -e “\033[字背景颜色;字体颜色;特效字符串\033[关闭属性”
/#字体色范围:30-37
echo -e “\033[30m 黑色字 \033[0m”
echo -e “\033[31m 红色字 \033[0m”
echo -e “\033[32m 绿色字 \033[0m”
echo -e “\033[33m 黄色字 \033[0m”
echo -e “\033[34m 蓝色字 \033[0m”
echo -e “\033[35m 紫色字 \033[0m”
echo -e “\033[36m 天蓝字 \033[0m”
echo -e “\033[37m 白色字 \033[0m”
/#字背景颜色范围:40-47
echo -e “\033[40;37m 黑底白字 \033[0m”
echo -e “\033[41;30m 红底黑字 \033[0m”
echo -e “\033[42;34m 绿底蓝字 \033[0m”
echo -e “\033[43;34m 黄底蓝字 \033[0m”
echo -e “\033[44;30m 蓝底黑字 \033[0m”
echo -e “\033[45;30m 紫底黑字 \033[0m”
echo -e “\033[46;30m 天蓝底黑字 \033[0m”
echo -e “\033[47;34m 白底蓝字 \033[0m”
/#特效范围
echo -e “\033[0m 无任何特效 \033[0m”
echo -e “\033[1m 高亮度 \033[0m”
echo -e “\033[4m 下划线 \033[0m”
echo -e “\033[5m 闪烁 \033[0m”
使用实例:
read -p "`echo -e "\033[31m 请输入密码: \033[0m"`" pass
echo $pass
六、处理海量数据之grep命令
grep应用场景:通常对数据进行 行的提取
语法:grep [选项]…[内容]…[file]
1、-v /#对内容进行取反提取
grep 'useraaa' a/b/c
grep -v 'useraaa' a/b/c
2、-n /#对提取的内容显示行号
grep -n 'useraaa' a/b/c
3、-w /#精确匹配
grep -w 'useraaa' a/b/c
4、-i /#忽略大小写
grep -i 'useraaa' a/b/c
5、^ /#匹配开头行首
grep '^useraaa' a/b/c
6、-E /#正则匹配
grep -E 'user1|user2|user3' a/b/c
七、处理海量数据之cut命令
cut应用场景:通常对数据进行列的提取
语法:cut [选项]…[file]
-d /#指定分割符
-f /#指定截取区域
-c /#以字符为单位进行分割
注意:不加-d选项,默认为制表符,不是空格
/bin/bash /#代表可以登录的用户
/sbin/nologin /#代表不可以登录的用户
1、-d与-f:
实例1:以’:'为分隔符,截取出/etc/passwd的第一列跟第三列
cut -d ':' -f 1,3 /etc/passwd
实例2:以’:'为分隔符,截取出/etc/passwd的第一列到第三列
cut -d ':' -f 1-3 /etc/passwd
实例3:以’:'为分隔符,截取出/etc/passwd的第二列到最后一列
cut -d ':' -f 2- /etc/passwd
2、-c:
实例4:截取/etc/passwd文件从第二个字符到第九个字符
cut -c 2-9 /etc/passwd
实例5:比如领导想叫你截取linux上面所有可登陆普通用户
grep '/bin/bash' /etc/passwd | cut -d ':' -f 1 | grep -v root
注意:
/bin/bash /#代表可以登录的用户
/sbin/nologin /#代表不可以登录的用户
八、处理海量数据之awk命令
1、awk的简介:其实一门编程语言,支持条件判断,数组,循环等功能,与grep,sed被称为linux三剑客
之所以叫AWK是因为取其三位创始人 Alfred Aho,Peter Weinberger, 和 Brian Kernighan 的Family Name的首字
符
2、awk的应用场景:通常对数据进行列的提取
3、语法:
awk '条件 {执行动作}'文件名
awk ‘条件1 {执行动作} 条件2 {执行动作} …’ 文件名
或awk [选项] ‘条件1 {执行动作} 条件2 {执行动作} …’ 文件名
4、特殊要点与举例说明:
printf /#格式化输出,不会自动换行。
(%ns:字符串型,n代表有多少个字符;
%ni:整型,n代表输出几个数字;
%.nf:浮点型,n代表的是小数点后有多少个小数
)
print /#打印出内容,默认会自动换行
\t /#制表符
\n /#换行符
实例:
printf '%s\t%s\t%s\n' 1 2 3 4 5 6
实例:
printf '%s\t%s\t%s\t%s\t%s\t%s\n' 1 2 3 4 5 6
实例:
df -h | grep /dev/mapper/centos-root | awk '{printf "/dev/vda1的使用率是:"} {print $5 }'
注意:这里的/dev/vda1需要按照你自己的计算机上的书写可以使用df -h 查看,我这里的是/dev/mapper/centos-root,如图所示:
小数:echo “scale=2; 0.13 + 0.1” | bc | awk ‘{printf “%.2f\n”, $0}’
注意:这里需要安装bc,否则会报错。安装命令 yum install bc
$1 /#代表第一列
$2 /#代表第二列
$0 /#代表一整行
实例:
df -h | grep /dev/mapper/centos-root | awk '{print $5}'
-F /#指定分割符
实例:
cat /etc/passwd | awk -F":" '{print $1}'
BEGIN /#在读取所有行内容前就开始执行,常常被用于修改内置变量的值
FS /#BEGIN时定义分割符
实例:
cat /etc/passwd | awk 'BEGIN {FS=":"} {print $1}'
END /#结束的时候 执行
NR /#行号
实例:
df -h | awk '(NR>=2 && NR<=5) {print $5}'
九、处理海量数据之sed命令
sed的应用场景:主要对数据进行处理(选取,新增,替换,删除,搜索)
sed语法:sed [选项][动作] 文件名
常见的选项与参数:
-n /#把匹配到的行输出打印到屏幕
p /#以行为单位进行查询,通常与-n一起使用
实例:df -h | sed -n ‘2p’ /#打印出第二行
d /#删除
实例:
#删除第二行
sed '2d' df.txt
#注意:这里不会对源文件产生影响
a /#在行的下面插入新的内容
实例:
sed '2a 1234567890' df.txt
#在第二行的下面加入内容(不会对源文件产生影响)
i /#在行的上面插入新的内容
实例:
sed '2i 1234567890' df.txt
#在第二行的上面加入内容(不会对源文件产生影响)
c /#替换
实例:
sed '2c 1234567890' df.txt
s/要被取代的内容/新的字符串/g /#指定内容进行替换
实例:
sed 's/0%/100%/g' df.txt
搜索:在文件中搜索内容
实例:
cat -n df.txt | sed -n '/100%/p'
-e /#表示可以执行多条动作
实例:
cat -n b.txt | sed -n -e 's/100%/100%-----100%/g' -e '/100%-----100%/p'
解析:
's/100%/100%-----100%/g'表示替换'/100%-----100%/p'表示打印到屏幕上
-i /#对源文件进行修改(高危操作,慎用,用之前需要备份源文件)
以上的操作都不会对源文件产生影响,如果需要对源文件进行修改就加上-i
实例:
set -i 's/0%/100%/g' df.txt
#会把源文件的0%都替换成100%
#搜索(打印出b.txt文件中的100%):
sed -n '/100%/p' b.txt
cat -n b.txt | sed -n '/100%/p'
一般-n和p是配合来使用的
十、if 循环控制(单分支与多分支)
单个判断(单分支循环):
if [ 条件判断 ];
then
执行动作
fi
实例:
if [ -e c.txt ]
then
echo '文件存在'
fi
if [ 条件判断 ];
then
执行动作
else
执行动作
fi
实例:
if [ -e c.txt ]
then
echo '文件存在'
else
echo '文件不存在'
fi
多个判断(多分支循环):
if [ 条件判断 ];
then
执行动作
elif [ 条件判断 ];
then
执行动作
elif [ 条件判断 ];
then
执行动作
fi
实例1:
if [ $1 -gt 90 ];
then
echo '成绩优秀'
elif [ $1 -gt 60 ];
then
echo "成绩及格"
elif [ $1 -lt 60 ];
then
echo "不合格"
fi
调用:sh demo.sh 参数
实例2:
echo '请输入成绩:'
read number
if [ $number -gt 90 ];
then
echo '成绩优秀'
elif [ $number -gt 60 ];
then
echo "成绩及格"
elif [ $number -lt 60 ];
then
echo "不合格"
elif [ $number -eq 60 ];
then
echo "成绩为60"
fi
十一、for循环控制
1、for 变量名 in 值1 值2 值3
do
执行动作
done
实例(依次打印出1-10):
for i in 1 2 3 4 5 6 7 8 9 10
do
echo $i
sleep 2
done
实例(依次打印出1-10):
for i in 1 2 3 4 5 6 7 8 9 10
do
echo $i
done
2、for 变量名 in 命令
do
执行动作
done
实例(依次打印出1-10):
for i in `seq 1 20`
do
echo $i
done
实例(检测主机是否正常工作):
for i in $(cat a.txt)
do
ping -c 2 $i
done
/#注意:a.txt是一个文件,ping -c 2 $i表示ping两次就结束
3、for ((条件))
do
执行动作
done
实例:
for ((i=1;i<11;i++))
do
echo $i
sleep 1
done
十二、case循环控制
应用场景:case循环常使用于多重分支,与if不同的是,if可以判断多个条件,case一次只能判断一种条件
语法结构:
case 变量 in
值1 )
执行动作1
;;
值2 )
执行动作2
;;
值3 )
执行动作3
;;
…
esac
实例:
echo "请输入:"
read x
case $x in
1)
echo "周一"
;;
2)
echo "周二"
;;
3)
echo "周三"
;;
4)
echo "周四"
;;
5)
echo "周五"
;;
6)
echo "周六"
;;
0)
echo "周日"
;;
*)
echo '输入有误重新输入'
;;
esac
十三、while 循环
应用场景:while循环是条件循环也是不定循环,只要条件判断式成立,循环就会一直进行着。直到判断式不成立 或者 选择跳
出循环 才会结束
语法结构:
while [ 条件判断式 ]
do
执行动作
done
实例:
计算0加到你输入数子的和
i=0
sum=0
while [ $i -lt $1 ]
do
sum=$(($sum+$i))
i=$(($i+1))
done
echo "和为:"$sum
十四、实例实战
1、如何让shell实现 可选择性执行 的功能
while [ 1 ]
do
cat <<EOF
***********************************
*1、计算出你输入目录下一共有多少文件 eg:/data
*2、计算从0加到您输入的数字为止
*3、批量创建用户
*4、测试用户名和密码是否匹配
*5、测试IP
*6、查看内存的使用率
*7、数据库中查询学生成绩
*q、退出
***********************************
EOF
echo "请输入功能编号:"
read key
case $key in
1 )
clear
sh 1.sh
;;
2 )
clear
sh 2.sh
;;
3 )
clear
sh 3.sh
;;
4 )
clear
sh 4.sh
;;
5 )
clear
sh 5.sh
;;
6 )
clear
sh 6.sh
;;
7 )
clear
sh 7.sh
;;
q )
clear
echo "------------------------感谢使用程序已退出------------------------"
break
;;
esac
done
2、巡查内存使用率
2.1创建6.sh
mem_total=`free -m | sed -n '2p' | awk '{print $2}'`
mem_used=`free -m | sed -n '2p' | awk '{print $3}'`
mem_free=`frce -m | sed -n '2p' | awk '{print $4}'`
Percent_mem_used=`echo "scale=2; $mem_used / $mem_total * 100" | bc`
Percent_mem_free= `echo "scale=2; $mem_free / $mem_total * 100" | bc`
now_time=`date +"%Y-%m-%d %H:%M:%S 星期%w"`
echo -e "\n"
echo -e " $now_time\n内存的使用率是: $Percent_ mem_used%"
echo -e "内存还剩余: $Percent_mem_free%未使用 "
if [ $mem_used -gt 1 ]
then
echo -e "\033[31;5m告警: \033[ 0m"
echo -e "\033[31;5m内存 使用率已超过负载能力,目前使用率达到: $Percent_mem_used%\033[0m"
else
echo "目前内存负载正常"
fi
echo -e "\n"
3、批量创建用户
应用场景:创建10000个用户
4、数据库里查询学生成绩
5、如何实现高效率登录别的机器
场景:假如公司有50台机器。每台机器对应ip不一样。
实例:
re_ip=`cat /home/shell/ip.txt | grep $1 | awk -F "|" '{print $2}'`
ssh ${re_ip}
其中ip.txt的内容为
sh | 192.168.2.3
js | 192.168.2.4
十五、其他
查看磁盘的使用率:
df -h
版权说明 : 本文为转载文章, 版权归原作者所有 版权申明
原文链接 : https://blog.csdn.net/weixin_44432032/article/details/120634307
内容来源于网络,如有侵权,请联系作者删除!