#!/bin/bash
# $# 是传给脚本的参数个数
# $0 是脚本本身的名字
# $1 是传递给该shell脚本的第一个参数
# $2 是传递给该shell脚本的第二个参数
# $@ 是传给脚本的所有参数的列表
# $* 是以一个单字符串显示所有向脚本传递的参数,与位置变量不同,参数可超过9个
# $$ 是脚本运行的当前进程ID号
# $? 是显示最后命令的退出状态,0表示没有错误,其他表示有错误
# 变量前加一个 例如 变量 var="address" address="吕梁市方山县" ${!var} ,表示获取变量名为var的值的变量的值
# 也就是先取var的值是address,然后再找名为address的变量的值 类似于C++中的指针
# choices=("aaa" "bbb" "ccc" "ddd")
# echo ${choices[@]} aaa bbb ccc ddd
# echo ${!choices[@]} 0 1 2 3
# echo ${#choices[@]} 4 表示数组的长度
# ;; 连续分号 (Terminator) 专用在 case 的选项,担任 Terminator 的角色
# 用` `,()把命令括起来,然后赋值给变量 current_dir=$(pwd) 或者 current_dir=`pwd`
# 参数:
# $1 - 选项数组
# 返回值:
# 用户选择的选项
# 定义选择函数
select_option() {
choices=("$@") # 将选项数组声明为全局变量
selected=0 # 初始化选择索引
while true; do
clear
for index in "${!choices[@]}"; do
if [ $index -eq $selected ]; then
printf "\033[31m> ${choices[$index]}\033[0m\n" # 高亮显示选中的选项
else
echo " ${choices[$index]}"
fi
done
read -n1 -s key # 读取单个按键并保持输入的隐私
case "$key" in
A) # 上箭头
if [ $selected -gt 0 ]; then
selected=$((selected - 1))
fi
;;
B) # 下箭头
if [ $selected -lt $(( ${#choices[@]} - 1 )) ]; then
selected=$((selected + 1))
fi
;;
"") # 回车键
break
;;
esac
done
# 打印最终结果日志
selected_option="${choices[$selected]}"
# echo "最终选择:$selected_option"
# cd /opt/servers/jenkins_install/jar_homes/
}
# 定义选项数组
options=("/aaaa" "/bbbb" "/cccc" "/dddd" "/eeee" "/ffff")
# 调用选择函数,并将选项数组作为参数传入
select_option "${options[@]}"
# 显示用户选择的选项
# echo "你选择了:$selected_option"
cd "/opt/servers/jenkins_install/jar_homes/$selected_option"
current_dir=$(pwd)
echo "当前切换到的目录: $current_dir"
这里千万要记住 脚本不要使用 sh aaaa.sh来执行 ,而要使用 source aaaa.sh 这种方式来执行脚本,否则会切换目录失败