常用代码
后台执行
nohup xxx >> output.log 2>&1 &curl命令
curl -O https://github.com/apolloconfig/apollo-quick-start/blob/master/sql/apolloportaldb.sqlnginx日志按指定时间统计url访问次数
shell
sed -n '/2024:11:01:00:00:00/,/2024:11:03:23:59:59/p' access.log > temp.log
awk '{print $7}' temp.log | sort | uniq -c | sort -nr常用命令
sed -n 抑制标准输出,直到命令p,例如 sed -n '/2024:11:01:00:00:00/,/2024:11:03:23:59:59/p' access.log > temp.log
sed 批量替换文件内容
sed -i "s/localhost/lab.io/g" grep lab.io -rl .
find
find . -name "*.txt" find . -type f find . -size +10M find . -mtime -1 *过去一天
du
du -ah . | sort -rh | head -n 10
语法
参数
$1 $2
$# 传递到脚本的参数个数
$* 以一个单字符串显示所有向脚本传递的参数。如"$*"用「"」括起来的情况、以"$1 $2 … $n"的形式输出所有参数。
$$ 脚本运行的当前进程ID号
$! 后台运行的最后一个进程的ID号
$@ 与$*相同,但是使用时加引号,并在引号中返回每个参数。如"$@"用「"」括起来的情况、以"$1" "$2" … "$n" 的形式输出所有参数。
$- 显示Shell使用的当前选项,与set命令功能相同。
$? 显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误。
数组
declare -A site
site["google"]="www.google.com"
site["runoob"]="www.runoob.com"
site["taobao"]="www.taobao.com"
echo ${site["runoob"]}
echo "数组的元素为: ${site[*]}"
echo "数组的键为: ${!site[*]}"
echo "数组元素个数为: ${#site[*]}"
运算符
val=`expr 2 + 2`
关系运算符只支持数字,不支持字符串,除非字符串的值是数字。
-eq/ne/gt/lt/ge/le
布尔运算符
!/-o/-a
逻辑运算符
&&/||
字符串运算符
=/!= 相等/不相等
[ -z $str ] 长度为0
[ -n $str ] 长度不为0
[ $str ] 是否不为空
文件运算符
-r/-w/-x 是否可读写执行
-f/-d/-b/-c 普通文件/目录/块设备/字符设备
-s 文件不为空
-e 文件存在
自增自减
let num++
((num--))
流程控制
if
shell
if-then-elif-then-else-fi
if [ $(ps -ef | grep -c "ssh") -gt 1 ]; then echo "true"; filoop
shell
for loop in 1 2 3 4 5
do
echo "The value is: $loop"
doneshell
while read FILM
do
echo "是的!$FILM 是一个好网站"
doneshell
echo '输入 1 到 4 之间的数字:'
echo '你输入的数字为:'
read aNum
case $aNum in
1|2) echo '你选择了 1或者2'
;;
3) echo '你选择了 3'
;;
4) echo '你选择了 4'
;;
*) echo '你没有输入 1 到 4 之间的数字'
;;
esacshell
#!/bin/bash
while :
do
echo -n "输入 1 到 5 之间的数字:"
read aNum
case $aNum in
1|2|3|4|5) echo "你输入的数字为 $aNum!"
;;
*) echo "你输入的数字不是 1 到 5 之间的! 游戏结束"
break
<!-- continue -->
;;
esac
done函数
[ function ] funname [()]
{
action;
[return int;]
}文件包含
. filename
source filename