#!/bin/bash
read -p "输入阶数" step
for((i = 0;i<=$step;i++))
do
for ((j = 0;j<i;j++))
do
echo -n "*"
done
echo #换行
done
#求100-1000内的水仙花数
echo "100-1000之间的水仙花数有:"
for ((num=100; num<1000; num++));
do
# 获取百十个位
bai=$((num / 100))
shi=$(((num / 10) % 10))
one=$((num % 10))
sum=$((bai**3 + shi**3 + one**3))
# 判断立方和是否等于原数
if [ $sum -eq $num ]; then
echo $num
fi
done
#!/bin/bash
# 初始化计数器
file_count=0
dir_count=0
c_file_count=0
# 遍历家目录下的所有文件和目录
#2.统计家目录下.c文件的个数
for entry in ~/*; do
if [ -f "$entry" ]; then
((file_count++))
if [[ $entry == *.c ]]; then
((c_file_count++))
fi
elif [ -d "$entry" ]; then
((dir_count++))
fi
done
# 输出结果
echo "普通文件数量: $file_count"
echo ".c 文件数量: $c_file_count"
echo "目录数量: $dir_count"
#!/bin/bash
read -p "请输入一个年份" -n 4 year
if ((year % 4 == 0 && year % 100 != 0 || year % 400 == 0))
then
echo " $year 是闰年"
else
echo " $year 是平年"
fi
#!/bin/bash
#创建一个软连接文件
ln -s link.txt linkfile
if [ -L linkfile ] ;then
echo "是一个软链接文件"
else
echo "不是一个软链接文件"
fi
#检查可执行权限
if [ -x link.txt ] ;then
echo "有可执行权限"
else
echo "无可执行权限"
fi
#检测文件内容
if [ -e linkfile ];then
echo "文件有内容"
else
echo "文件为空"
fi
#!/bin/bash
read -p "请输入分数" score
case $score in
9?,100)
echo " A"
;;
8?)
echo "B"
;;
7?)
echo "C"
;;
6?)
echo "D"
;;
*)
echo "E"
;;
esac
read -p "请输入字母" letter
case $letter in
[[:lower:]])
echo "是小写字母"
;;
[[:upper:]])
echo "是大写字母"
;;
*)
echo "输入错误"
esac
#!/bin/bash
#求1-100的和
i=0
res=0
while [ $i -le 100 ]
do
res=$[ res + i ]
i=$[ i + 1 ]
done
echo "1加到100=$res"
#终端输入数组,求数组中元素的和
echo "输入数组"
read -a arr
len=${#arr[*]} # 数组长度
i=0 # 数组下标
sum=0 # 数组元素和
while [ $i -lt $len ]
do
((sum+=${arr[i]}))
((i++))
done
echo "数组和为: $sum"
#终端输入行数,打印直角三角形
read -p "请输入行数" line
i=1
while [ $i -le $line ]
do
j=1
while [ $j -le $i ]
do
echo -n "*"
((j++))
done
echo
((i++))
done
#!/bin/bash
# 定义一个函数来计算稀疏数组的和
sum_sparse_array() {
# 获取传递的数组名称
local -n array_ref=$1 # 使用 -n 进行间接引用
sum=0
# 遍历传入的数组
for index in "${!array_ref[@]}"; do
((sum+=array_ref[$index]))
done
echo $sum
}
# 从终端读取稀疏数组
echo "请输入稀疏数组,格式为 '[key1]=value1 [key2]=value2 ...':"
read input_arr
# 解析输入并存储到关联数组中
#declare -A arr
echo "原始输入: $input_arr" # 调试信息
# ~:用于模式匹配运算符。
# \:用于转义特殊字符。
# []:匹配方括号。
# ():创建捕获组。
# +:表示前面的字符或字符集可以出现一次或多次。
while [[ $input_arr =~ \[([0-9]+)\]=([0-9]+) ]]; do
key=${BASH_REMATCH[1]}
value=${BASH_REMATCH[2]}
arr[$key]=$value
# 移除已解析的部分
# s/\[$key\]=$value//:
# s/:表示替换操作。
# /\[$key\]=$value/:匹配 [key]=value 形式的字符串。这里使用了反斜杠 \ 转义 [ 和 ]。
# //:将匹配到的部分替换为空字符串,即删除这部分内容。
input_arr=$(echo "$input_arr" | sed "s/\[$key\]=$value//; s/^ *//; s/ *$//")
echo "解析出: [$key]=$value, 剩余输入: $input_arr" # 调试信息
# 如果输入为空,跳出循环
if [[ -z $input_arr ]]; then
break
fi
done
# 检查是否有未解析的输入
if [[ -n $input_arr ]]; then
echo "无效的输入格式: $input_arr"
exit 1
fi
# 调用函数并传递数组引用
result=$(sum_sparse_array arr)
echo "稀疏数组的和为: $result"