#!/usr/bin/env bash #========== 获取当前时间戳 ==========# timestamp=$(date +%s) echo "当前时间戳:${timestamp}" #========== 时间戳转日期时间字符串 ==========# datetime1=$(date -d @"${timestamp}" +'%Y-%m-%d %H:%M:%S') echo "当前时间(1):${datetime1}" #========== 直接获取当前日期时间字符串 ==========# datetime2=$(date +'%Y-%m-%d %H:%M:%S') echo "当前时间(2):${datetime2}" #========== 检查文件是否存在 ==========# filename="/tmp/test.txt" if [ -f $filename ]; then echo "文件[${filename}]存在" else echo "文件[${filename}]不存在" fi #========== 检查目录是否存在 ==========# dirname="/tmp" # 结尾加不加“/”都不影响判断 if [ -d $dirname ]; then echo "目录[${dirname}]存在" else echo "目录[${dirname}]不存在" fi #========== 获取命令行参数(可缺省) ==========# # 示例:/tmp/demo.sh -name 张三 -gender 男 -birth 2003 name="匿名" # 设置name参数缺省值 gender="保密" # 设置gender参数缺省值 birth=1970 # 设置birth参数缺省值 # 获取命令行参数 while [ $# -gt 0 ]; do case $1 in -name) name=$2 shift ;; -gender) gender=$2 shift ;; -birth) birth=$2 shift ;; *) echo "无法识别参数:$1" exit 1 ;; esac shift done echo "俺叫${name}(${gender}),出生于${birth}年。" #========== 自增运算 ==========# counter=1024 ((counter++)) # 自增1,注意必须用两对()围起来 echo "counter = ${counter}" ((counter += 5)) # 自增5,注意必须用两对()围起来 echo "counter = ${counter}" #========== 数组的使用 ==========# array=('Jacky' 'Andy' 'Leon' 'Aaron') length=${#array[@]} echo "数组长度:${length}" echo "张学友 <===> ${array[0]}" echo "刘德华 <===> ${array[1]}" echo "黎 明 <===> ${array[2]}" echo "郭富城 <===> ${array[3]}" # 遍历数组元素 key=0 for value in "${array[@]}"; do echo "array[$key] => $value" ((key++)) done #========== 关联数组的使用 ==========# declare -A profile profile['name']='李四' profile['gender']='女' profile['birth']=2004 echo "俺叫${profile['name']}(${profile['gender']}),出生于${profile['birth']}年。" #========== 打包指定目录 ==========# dirname='/tmp/test/' # 要打包的目录 dirname=${dirname%/} # 去掉结尾的“/” if [ -d $dirname ]; then # 文件名为:/tmp/test.年月日时分秒.tar.gz datetime=$(date +'%Y%m%d%H%M%S') filename="${dirname}.${datetime}.tar.gz" # 执行打包命令 cmd="tar -zcPf ${filename} ${dirname}" if $cmd; then echo '打包成功' else echo '打包失败' fi else echo "打包失败:目录[${dirname}]不存在" fi #========== 自定义函数 ==========# multiplication() { local num1=$1 # 参数1 local num2=$2 # 参数2 echo $((num1 * num2)) # 返回两数的积,注意是用echo,而不是用return } num1=3 num2=7 result=$(multiplication $num1 $num2) echo "${num1} * ${num2} = ${result}" #========== for的使用 ==========# for ((i = 0; i < 10; i++)); do echo "for循环 - 第${i}次" done #========== case的使用(相当于PHP的switch) ==========# echo -e "请输入任意月份:\c" read -r month # 这里会发生阻塞,直到用户输入内容 case ${month} in 1 | 3 | 5 | 7 | 8 | 10 | 12) echo "${month}月是大月" ;; # 这里两个分号相当于break 4 | 6 | 9 | 11) echo "${month}月是小月" ;; 2) echo "${month}月既不是大月,也不是小月" ;; *) # 这里的星号相当于default echo "您输入的月份[${month}]不合法,必须为1~12" ;; esac #========== while的使用 ==========# counter=0 while true; do # -lt表示小于(less than) if [ $counter -lt 5 ]; then echo "while循环 - 第${counter}次" sleep 1 # 休眠1秒钟 ((counter++)) else break fi done #========== 判断两个字符串是否相等 ==========# str1='hello' str2='world' if [ ${str1} == ${str2} ]; then echo 'str1和str2相等' else echo 'str1和str2不相等' fi #========== 常用的数值比较条件表达式 ==========# # -eq:等于(equal) # -ne:不等于(not equal) # -gt:大于(greater than) # -ge:大于或等于(greater than or equal) # -lt:小于(less than) # -le:小于或等于(less than or equal) #========== 说明 ==========# # [root@localhost ~]# /tmp/demo.sh -name 张三 -gender 男 -birth 2003
Copyright © 2024 码农人生. All Rights Reserved