计算内存使用率
解答一
#!/usr/bin/env bash
line=$(free | head -2 | tail -1);
total=$(echo "$line" | awk '{print $2}')
used=$(echo "$line" | awk '{print $3}')
# echo $used;
# echo $total;
x=$((used * 100 * 100 / total))
cordon=$((80 * 100 ))
# echo $x
percentage=$(awk --assign=x="${x}" 'BEGIN{printf "%.2f",x/100}')
## 因为-gt不能比较小数,上边值放大了100倍
if [[ $x -gt cordon ]]; then
echo "当前内存超过80%"
else
echo "内存使用率为${percentage}%"
fi
解答二
#!/usr/bin/env bash
line=$(free | head -2 | tail -1);
total=$(echo "$line" | awk '{print $2}')
used=$(echo "$line" | awk '{print $3}')
# echo $used;
# echo $total;
# x=$((used * 100 * 100 / total))
# cordon=$((80 * 100 ))
# echo $x
percentage=$(awk --assign=used="${used}" --assign=total="${total}" 'BEGIN{printf "%.2f",used*100/total}')
# 或者用bc,此处xargs printf 仅为了处理bc计算结果中如果出现<1的小数不是以0.开头的,比如0.45为.45,需要额外处理下
# percentage=$(bc <<< "scale=2;${used}*100/${total}" | xargs printf "%.2f\n" )
if [[ $(echo "$percentage > 80 " | bc) -eq 1 ]]; then
echo "当前内存超过80%"
else
echo "内存使用率为${percentage}%"
fi
如何在 Linux 中将用户添加到多个组
假设我们有一个名为 “john” 的用户,我们想将他添加到 “developers”、”testers” 和 “managers” 这三个组中。
# 使用 usermod 命令将用户添加到多个组
sudo usermod -a -G developers,testers,managers john
解释:
sudo:以管理员权限运行命令
usermod:修改用户账户的命令
-a:追加模式,将用户添加到附加组而不会从其他组中删除
-G:指定要添加用户的附加组,多个组之间用逗号分隔
john:要添加到组的用户名
执行此命令后,用户 “john” 将被添加到 “developers”、”testers” 和 “managers” 组中,同时保留他原有的组成员身份。
bash中如何解压 .xz 和 .tar.xz 文件
# 解压 .xz
xz -d file.xz
# -k 或 --keep:保留原始文件。
# -q 或 --quiet:在执行过程中不显示任何信息。
# -t 或 --test:测试压缩文件的完整性,而不解压缩它。
# 解压 .tar.xz
tar -xJvf archive.tar.xz
bash中如何遍历数组
array=(apple banana orange)
## 方式1
for element in "${array[@]}"; do
echo "$element"
done
## 方式2
for i in "${!array[@]}"; do
echo "${array[$i]}"
done
## 方式3
i=0
while [ $i -lt "${#array[@]}" ]; do
echo "${array[$i]}"
((i++))
done
## 方式4
for ((i=0; i<${#array[@]}; i++)); do
echo ${array[$i]}
done
从here-document产生数组
## 方式1
readarray -t arr <<EOF
ddd
xxxx
EOF
## 方式2
readarray -t arr < <(cat <<EOF
ddd
xxxx
EOF
)
bash实现二进制和十进制互相转化
#!/bin/bash
# 读取二进制数
echo -n "输入一个二进制数: "
read binary
# 初始化十进制数为0
decimal=0
# 从右到左遍历每一位二进制位
for (( i=${#binary}-1; i>=0; i-- )); do
# 获取当前位的值
bit="${binary:$i:1}"
# 如果当前位是1,则将对应的2的幂次方加到十进制数中
if [ "$bit" == "1" ]; then
decimal=$((decimal + 2**($((${#binary}-i-1)))))
fi
done
echo "对应的十进制数是: $decimal"
#!/bin/bash
# 读取十进制数
echo -n "输入一个十进制数: "
read decimal
# 初始化二进制数为空
binary=""
# 通过不断除以2获取二进制位
while [ $decimal -ne 0 ]; do
# 获取当前最低位
bit=$((decimal % 2))
# 将当前位拼接到二进制数的最前面
binary=$bit$binary
# 去掉当前最低位
decimal=$((decimal / 2))
done
echo "对应的二进制数是: $binary"
bash实现二进制和十六进制转化
#!/bin/bash
# 读取二进制数
echo -n "输入一个二进制数: "
read binary
bc < <(echo "ibase=2;$binary") | xargs -I{} -r printf "对应的十六进制数是: %x" {}
#!/bin/bash
# 读取十六进制数
echo -n "输入一个十六进制数: "
read hex
# 使用bc命令进行进制转换
binary=$(bc <<< "obase=2; ibase=16; $hex");
echo "对应的二进制数是: $binary"