| created_date |
|---|
2022-08-14 |
[TOC]
- shell
# 整数
a=10
b=5
sum=$((a + b)) # 可以使用 expr 或 $(( )) 进行整数计算
# 浮动数
a=3.14
b=1.5
result=$(echo "$a + $b" | bc) # Shell 本身不直接支持浮动数的变量,但你可以使用外部命令如 bc、awk 或 printf 来进行浮动数运算
echo $result
# 数组
arr=("apple" "banana" "cherry")
echo ${arr[0]} # 输出 apple
echo ${arr[@]} # 输出 apple banana cherry
# 关联数组
# 从bash 4.x 开始,Shell支持关联数组(类似于字典或哈希表),可以通过字符串键来访问数组值。
declare -A fruit
local -A fruit_local # 声明一个局部的关联数组
fruit["apple"]="red"
fruit["banana"]="yellow"
echo ${fruit["apple"]} # 输出 red# 普通数组作为关联数组的键
#!/bin/bash
# 声明一个普通数组
arr=("1" "2" "3")
# 声明一个关联数组
declare -A deals
# 使用普通数组中的元素作为关联数组的键
deals["${arr[0]}_data_cid"]="111"
deals["${arr[1]}_piece_cid"]="222"
deals["${arr[2]}_piece_size"]="red"
# 打印关联数组
for key in "${!deals[@]}"; do
echo "$key -> ${deals[$key]}"
done# while 循环
while $condition
do
$command
done
# 无限循环
while true
do
$command
done
# for循环
sum=0
i=1
for ((;i<=100;i++));do
((sum += i))
done
echo "the sum is: $sum"
#!/bin/bash
array_name=(
"137.184.202.162:4132"
"218.17.62.53:4132"
"141.95.85.71:4132"
)
# 输出数组长度
echo ${#array_name[*]}
echo ${#array_name[@]}
# 输出数组所有的值
echo ${arr[@]}
# 遍历数组
for ipport in ${array_name[@]};do echo $ipport;done
for i in ${!array_name[@]};do echo ${array_name[i]};done${var#*/} # 去掉变量var从左边算起的第一个'/'字符及其左边的内容
${var##*/} # 去掉变量var从左边算起的最后一个'/'字符及其左边的内容
${var%/*}
${var%/*}
for name in `ls *.Linux`;do mv $name ${name%.*};done # 分割ip和端口号
ipport="127.0.0.1:8080"
ip=${ipport%:*}
port=${ipport#*:}
echo "${ip} ${port}" echo '"127.0.0.1:8080"' > ipport.txt
ipport_raw=$(cat ipport.txt)
# 去掉两边的双引号
len_temp_1=${#ipport_raw}
len_temp_2=$(echo "${len_temp_1}-2" | bc -l)
ipport=${ipport_raw:1:${len_temp_2}}
echo $ipport-e filename 如果 filename存在,则为真
-d filename 如果 filename为目录,则为真
-f filename 如果 filename为常规文件,则为真
-L filename 如果 filename为符号链接,则为真
-r filename 如果 filename可读,则为真
-w filename 如果 filename可写,则为真
-x filename 如果 filename可执行,则为真
-s filename 如果文件长度不为0,则为真
-h filename 如果文件是软链接,则为真
filename1 -nt filename2 如果 filename1比 filename2新,则为真。
filename1 -ot filename2 如果 filename1比 filename2旧,则为真。
-eq 等于
-ne 不等于
-gt 大于
-ge 大于等于
-lt 小于
-le 小于等于
#!/bin/bash
source /etc/profile
if [ $num -gt 182 ]; then
touch "$num"
fi#!/bin/bash
fruits=(
"apple"
"pear"
"orange"
"watermelon"
)
select var in ${fruits[@]}
do
case $var in
"apple"|"pear"|"orange") echo "123";break;
;;
"watermelon")
echo "4"
;;
*)
echo "5"
exit 1
;;
esac
done
#!/bin/bash
echo "1"
sleep 5 &
echo "3"
wait # 会等待wait所在bash上的所有子进程执行结束
echo "5"
pid=$! # 获取后台进程的 PID
wait $pid # 等待指定 PID 的进程完成
# 在 Bash 中,wait 支持 -n 选项结合超时控制,但需要 Bash 4.3 或更高版本。
sleep 5 &
sleep 10 &
wait -n 2s # 等待任意任务完成或 2 秒超时# timeout 可能在某些系统(如 macOS)上不可用,需安装 coreutils 或使用手动方法。
#!/bin/bash
echo "Starting a task with timeout..."
timeout 3s sleep 5 & # 设置 3 秒超时,但 sleep 5 秒
pid=$!
wait $pid
if [ $? -eq 124 ]; then
echo "Task timed out!"
else
echo "Task completed!"
fi#!/bin/bash
startDate=20210401
endDate=20230401
startSec=`date -d "$startDate" "+%s"`
endSec=`date -d "$endDate" "+%s"`
for((i=$startSec; i<=$endSec; i+=86400))
do
firstday=`date -d "@$i" "+%Y%m%d"`
echo ${firstday}
# y=$[$i+86400]
# secondday=`date -d "@$y" "+%Y%m%d"`
# echo ${secondday}
done