目录
Shell中$0、$1、$2、$?、$!、$$、$*、$#、$@的含义
test命令进行测试


测试执行文件,后序用$?去判断即可


test -e mysql.sh && echo "该文件是存在的" || echo "该文件不存在"
3.2判断是否是普通文件还是目录类型(-f , -d)
test -d hello && echo "OK" || echo "NO"

3.3判断文本中是否有内容(-n判断是否有内容)
test -n " " && echo OK || echo NO
3.3判断是否有该文件并且用test命令做兜底处理([ -f "xxx"]判断)
[ -f "Fairy同学.png" ] && echo "Fairy同学.png已经存在" || touch Fairy同学.png && echo "创建完毕"
3.4权限的判断([ -r "大碗宽面.txt" ] && cat 大碗宽面.txt || echo "阅读失败没有权限")


[ "${name2}"="Fox" ]&&echo ok || echo no
我们也可以结果取反
[ ! "${name2}"="Fox" ]&&echo ok || echo no
expr命令
- echo "Enter two numbers"
- read x
- read y
- sum=`expr $x + $y`
- echo "Sum = $sum"
一般用于计算指定的表达式,并且给定输出
(64条消息) expr命令_WindrunnerMax的博客-CSDN博客
数值比较符号
双中符号不需要转义符,而那种普通的是需要转移符号的,单中符号需要+转义符\

2.比较两个是否相等
[[ -n "$a" && "$a" = "$b" ]] && echo yes || echo no

逻辑判断脚本输入内容
-
- #! /bin/bash
-
- read -p "pls input a char:" var1
-
- #逻辑条件的测试
- [ "$var1" -eq "1" ]&&{
- echo $var1
- exit 0
- }
-
- [ "$var2" = "2" ]&&{
- echo $var1
- exit 0
- }
-
- ##只能输入1or2
- [ "$var1"!="2" -a "$var1" != "1" ]&&{
- echo "脚本出错,必须输入1或者2"
- exit 1
- }
根据条件进行对应的测试安装

- #! /bin/bash
-
- # 判断脚本目录是否存在
- path=/root/shellData
-
- #1.条件判断
- [ ! -d "$path" ] && mkdir $path -p
-
- #2.开发脚本正常逻辑
- cat <<END
- 1.install 1
- 2.install 2
- 3.exit
- pls input the num you want
- END
-
- read -p "pls select num:" num
-
- #3.判断
- [ "$num" -eq "1" ] && {
- echo "starting inalling 1 ..."
- sleep 2;
- #判断是否有文件执行权限
- [ -x "$oath/lamp.sh" ] || {
- echo "not exec"
- exit 1
- }
- source $path/lamp.sh
- exit $?
- }
-
- #4.退出
- [ "$num" -eq 3 ]&&{
if条件处理


开发内存检测脚本

1.查看当前可用内存

-
- #! /bin/bash
-
- FreeMem=`free -m |awk 'NR==2 {print $NF}'`
- CHARS="Current memory is $FreeMem"
-
- if [ "$FreeMem" -lt "2100" ]
- then
- echo $CHARS|tee /root/message/message.txt
- #发送邮件给到用户
- echo '内存不足'| mail -s "`date +%F-%T`$CHARS" 746879613@qq.com
- echo "内存不足,抓住维护服务器"
- fi
如何检测服务状态
命令:
1.netstat -tunlp|grep 服务 | wc -l
2.ss -tunlp|greo xxx
3.lsof -i tcp:3306

- nmap 82.157.198.247 -p 3306 |grep open
- nmap 82.157.198.247 -p 3306 |grep open|wc -l
telnet命令也可以判断端口是否可以远程
telnet ip 端口

Linux中如何使用echo命令?(用法详解)-linux运维-PHP中文网
linux中竖线'|',双竖线‘||’,&和&&的意思 - 星朝 - 博客园 (cnblogs.com)
(64条消息) Shell中 2>/dev/null_小悟空爱吃桃的博客-CSDN博客_2>/dev/null

- #! /bin/bash
- if [ `echo -e "\n" |telnet 82.157.198.247 3306 2>/dev/null | grep Connected |wc -l` -eq "1" ]
- then
- echo "Mysql is running"
- else
- echo "Mysql is stopped."
- docker start mysql
- fi
mysql服务正在启动

Rsync脚本

Shell中$0、$1、$2、$?、$!、$$、$*、$#、$@的含义
$0 就是编写的shell脚本本身的名字
$1 是在运行shell脚本传的第一个参数
$2 是在运行shell脚本传的第二个参数
$$ Shell本身的PID(ProcessID,即脚本运行的当前 进程ID号)
$! Shell最后运行的后台Process的PID(后台运行的最后一个进程的 进程ID号)
$? 最后运行的命令的结束代码(返回值),即执行上一个指令的返回值 (显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误)
$- 显示Shell使用的当前选项,与set命令功能相同
∗ 所 有 参 数 列 表 , 如 " * 所有参数列表,如"∗所有参数列表,如"*" 用["],括起来的情况,以"$1" “2 " . . . . " 2" ...."2"...."n” 的形式输出所有参数,
@ 所 有 参 数 列 表 。 如 " @ 所有参数列表。如"@所有参数列表。如"@“用「”」括起来的情况、以"$1" “2 " … " 2" … "2"…"n” 的形式输出所有参数。
@ 跟 @ 跟@跟*类似,但是可以当作数组用
$# 添加到Shell的参数个数
(64条消息) Shell中$0、$1、$2、$?、$!、$$、$*、$#、$@的含义_听说唐僧不吃肉的博客-CSDN博客
- #!/bin/sh
- echo "shell脚本名称: $0"
- echo "传到shell的第一个参数: $1"
- echo "传到shell的第二个参数: $2"
sed命令
功能:能够结合正则表达式对文件进行操作,处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容
- echo sksksksksksk | sed 's/sk/SK/2g'
- skSKSKSKSKSK
- echo sksksksksksk | sed 's/sk/SK/3g'
- skskSKSKSKSK
- echo sksksksksksk | sed 's/sk/SK/4g'
- skskskSKSKSK
Linux之sed命令详解 - zakun - 博客园 (cnblogs.com)