Skip to main content

5.Shell脚本相关

shell脚本中&& 和 &的区别,|和|| 的区别

&    #表示任务在后台执行  
&& #表示前一条命令执行成功时,才执行后一条命令
| #表示管道,上一条命令的输出,作为下一条命令参数
|| #表示上一条命令执行失败后,才执行下一条命令

shell脚本中case语句怎么写

case $num in
1)
echo "Monday"
;;
2)
echo "Tuesday"
;;
*)
echo "error"
esac

shell脚本中break和continue的区别

break     #命令可以带一个参数,一个不带参数的break 循环只能退出最内层的循环,而break N可以退出N 层循环。
continue #命令也可以带一个参数,一个不带参数的continue 命令只去掉本次循环的剩余代码,而continue N 将会把N 层循环剩余的代码都去掉,但是循环的次数不变。

都写过哪些shell脚本

#nginx,mysql,tomcat  进程监控脚本   数据备份脚本	服务重启脚本	 zabbix自定义监控项

怎样检测shell脚本的语法

bash -n script.sh   # -n 读一遍脚本中的命令但不执行,用于检查脚本中的语法错误。  
bash -v script.sh # -v 一边执行脚本,一边将执行过的脚本命令打印到标准错误输出。
bash -x script.sh # -x 提供跟踪执行信息,将执行的每一条命令和结果依次打印出来。

shell中 $n,$#,$*,$?分别代表什么含义?

$n中的 n表示一个数字,代表了脚本或函数的参数。$1表示第一个参数,$2表示第二个参数,以此类推。

$#表示传递给脚本或函数的参数个数。例如,如果一个脚本被调用时传递了3个参数,则 $#的值为3。

$*表示所有传递给脚本或函数的参数列表。这个变量将所有参数当做单个字符串来处理,并使用IFS(Internal Field Separator)变量的值作为分隔符将它们连接起来。通常,空格是默认的分隔符。例如,如果一个脚本被调用时传递了3个参数,则 $*将包含这3个参数,用空格分隔。

$?表示上一个命令的退出状态码。当一个命令执行完毕后,它会返回一个退出状态码,用于表示命令执行的结果。通常,0表示成功,非0表示失败。因此,通过检查 $?的值,可以确定上一个命令是否执行成功。

shell脚本中怎样抓取此脚本的pid

$$

要在脚本中抓取mysql的pid这个脚本怎么写

ps -aux | grep mysql | awk '{print $2}'   #MySQL pid 文件记录的是当前 mysqld 进程的 pid,pid 亦即 Process ID。

shell脚本中怎样判断一个文件是否存在

if [ -f /root/anaconda-ks.cfg ];then
echo 1
else
echo
fi
#或使用find查找,把值赋值给变量,变量大于0的话存在

shell脚本中怎样判断一个目录是否存在

if [ -d /root/ ];then
echo 1
else
echo
fi

编写一个Shell脚本,实现备份指定目录下的文件,并保留最近7天的备份

#!/bin/bash

# 指定备份目录和备份目标目录
source_dir="/path/to/source_directory"
backup_dir="/path/to/backup_directory"
# 定义备份文件名格式(包含日期)
backup_file="$backup_dir/backup_$(date +'%Y%m%d').tar.gz"
# 定义日志文件路径
log_file="/path/to/backup.log"


# 创建备份目标目录(如果不存在)
mkdir -p "$backup_dir"

# 执行备份并压缩
tar -zcvf "$backup_file" "$source_dir" # 可根据需要添加额外的选项进行压缩或排除某些文件

# 删除7天前的备份
find "$backup_dir" -type f -name 'backup_*.tar.gz' -mtime +7 -exec rm {} \;

# 输出备份完成信息到日志文件
echo "Backup completed: $backup_file" >> "$log_file"
echo "Backup completed: $backup_file"