bash
vi delete_exited_containers.sh
bash
#!/bin/bash
# 列出所有停止的容器并存储到数组
list_exited_containers() {
echo -e "\nStopped containers:"
containers=()
# 获取停止的容器信息并存入数组
while IFS= read -r line; do
containers+=("$line")
done < <(docker ps -a --filter "status=exited" --format "{{.ID}} {{.Names}}")
# 显示停止的容器列表
for i in "${!containers[@]}"; do
echo "[$i] ${containers[$i]}"
done
}
# 删除指定的容器
delete_containers() {
local indexes=("$@")
for index in "${indexes[@]}"; do
if [[ $index =~ ^[0-9]+$ ]] && [[ $index -lt ${#containers[@]} ]]; then
container_info=${containers[$index]}
container_id=$(echo "$container_info" | awk '{print $1}')
echo "Deleting container: $container_info"
docker rm "$container_id"
else
echo "Invalid index: $index"
fi
done
}
# 主逻辑
while true; do
list_exited_containers
if [[ ${#containers[@]} -eq 0 ]]; then
echo "No stopped containers to delete."
break
fi
# 获取用户输入
echo -e "\nEnter indexes of containers to delete (space-separated), or type 'all' to delete all, or 'exit' to quit:"
read -r input
if [[ "$input" == "exit" ]]; then
echo "Exiting..."
break
elif [[ "$input" == "all" ]]; then
# 删除所有容器
for i in "${!containers[@]}"; do
container_id=$(echo "${containers[$i]}" | awk '{print $1}')
echo "Deleting container: ${containers[$i]}"
docker rm "$container_id"
done
echo "All stopped containers deleted."
else
# 使用下标删除指定的容器
IFS=' ' read -r -a indexes <<< "$input"
delete_containers "${indexes[@]}"
fi
echo -e "\nOperation complete. Would you like to continue? (yes/no):"
read -r continue_input
if [[ "$continue_input" != "yes" ]]; then
echo "Exiting..."
break
fi
done
赋予执行权限
bash
chmod +x delete_containers_by_index.sh
运行脚本
bash
./delete_containers_by_index.sh
输入下标,然后输入yes确认删除
bash
0
yes