常用语法
头 #!/bin/bash
#! 是一个约定的标记,它告诉系统这个脚本需要什么解释器来执行,即使用哪一种 Shell。
数值对比
less great than equal
-eq 测试两个整数是否相等
-ne 测试两个整数是否不等
-gt 测试一个数是否大于另一个数
-lt 测试一个数是否小于另一个数
-ge 大于或等于
-le 小于或等于
表达式
[ expression ] 括号两端必须要有空格
[[ expression ]]
&&、||、<和> 操作符能够正常存在于[[ ]]条件判断结构中,但是如果出现在[ ]结构中的话,会报错 [ ] 用 -a -o
与或非
-a: and
-o: or
!: 非
逻辑与:&&
逻辑或:||
字符串比较
== 等于 两边要有空格
判断if
// 单条件
if [ expression ];then
statement1
statement2
.......
fi
// 双条件
if 判断条件;then
statement1
statement2
.....
else
statement3
statement4
fi
// 多条件
if [[ 判断条件 ]];then
statement1
statement2
elif [[ 判断条件 ]];then
statement1
statement2
elif [[ 判断条件 ]];then
statement1
statement2
else
statement1
statement2
fi
命令
grep
shell脚本Demo
创建新用户并 初始化密码
$? : 执行上一个指令的返回值 (显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误)
>
覆
盖
方
式
将
正
确
错
误
输
出
覆
盖
到
目
标
文
件
,
> 覆盖方式将正确错误输出覆盖到目标文件 ,
>覆盖方式将正确错误输出覆盖到目标文件,>>追加方式将正确错误输出覆盖到目标文件
/dev/null代表linux的空设备文件,所有往这个文件里面写入的内容都会丢失,俗称“黑洞”
#!/usr/bin/bash
read -p "Please input a username: " user
id $user &>/dev/null
if [ $? -eq 0 ];then
echo "user $user alreafy exist"
else
useradd $user &>/dev/null
echo "123456" | passwd --stdin $user &>/dev/null
if [ $? -eq 0 ];then
echo "user $user create successful"
else
echo "user $user create failed"
fi
fi
查看系统状态
grep 正则表达式 filename
grep 指令用于查找内容包含指定的范本样式的文件,如果发现某文件的内容符合所指定的范本样式,预设 grep 指令会把含有范本样式的那一列显示出来。若不指定任何文件名称,或是所给予的文件名为 -, grep 指令会从标准输入设备读取数据(管道)。awk 也是
.匹配字符 ^ 匹配开头 $匹配结束
awk ‘{[pattern] action}’ {filenames} # 行匹配语句 awk ‘’ 只能用单引号
// 每行按空格或TAB分割,输出文本中的1、4项
awk '{print $1,$4}'
awk -F 指定分割符号
// 每行用,分割,输出文本中的1、4项
awk -F, '{print $1,$2}'
awk -F ',' '{print $1,$2}'
awk ‘NR2’
NR - Number of Record - 当前处理的行是第几行 一个换行符算一行
FNR - File Number of Record 当后面接多个文件时 。 当前文件的第n行
awk 'NR==2{print $2}'
正则表达式
// [G ]+ 意思是匹配 G或者空格中的任意一个 +代表数量,可以是GGG.... 或者空格空格空格
// (AB)+ 意思是匹配 AB +代表数量,可以是ABABABAB 不是任意指定了。。
df -h|grep /$|awk -F '[G ]+' '{print $1 $3}'
```powershell
#!/usr/bin/bash
System=$(hostnamectl |grep "System"|awk -F ':' '{print $2}')
Kernel=$(hostnamectl |grep "Kernel"|awk -F ':' '{print $2}')
vt=$(hostnamectl |grep "Virtualization"|awk -F ':' '{print $2}')
static_Hostname=$(hostnamectl |grep "Static hostname"|awk -F ':' '{print $2}')
#Domain_Hostname=$(hostnamectl |grep "Transient"|awk -F ':' '{print $2}')
Network_Total=$(ls /etc/sysconfig/network-scripts/|grep ifcfg|wc -l)
Network_Sum=$(ls /etc/sysconfig/network-scripts/|grep ifcfg|awk -F '-' '{print $2}'|xargs)
Network_ens33=$(ifconfig ens33|awk 'NR==2{print $2}')
Network_W=$(curl -s icanhazip.com)
echo "当前系统版本是:$System"
echo "当前内核版本是:$Kernel"
echo "当前虚拟平台是: $vt"
echo "当前静态主机名是:$static_Hostname"
#echo "当前动态主机名是:$Domain_Hostname "
echo "当前总网络IP又多少:$Network_Total"
echo "当前网卡名称分别是:$Network_Sum "
echo "当前ens33网卡IP地址是:$Network_ens33"
echo "当前外网IP地址是:$Network_W"