#!/usr/bin/env bash
# 验证指定程序是否有效 或者是否能够在PATH中找到
in_path(){
# 找给定的命令 找到 返回 0
# 没找到 返回 1
# 函数执行完成后 恢复
#IFS是internal field separator 的缩写,shell的特殊环境变量。ksh根据IFS存储的值,可以是空格、tab、换行符或者其他自定义符号,来解析输入和输出的变量值。
# 具体请查看 http://xstarcd.github.io/wiki/shell/IFS.html
cmd=$1 ourpath=$2 result=1
oldIFS=$IFS IFS=":"
for directory in $ourpath ; do
if [-x $directory/$cmd]; then
reuslt=0 # 找到命令 😊
fi
done
IFS = $oldIFS
return $reuslt
}
# -x 检查是否存在
checkForCmdInPath()
{
var=$1
if [ "$var" != "" ] ; then
# 也可以使用 $(echo $var | cut -c1)
# 殊途同归
if [ "${var%${var#?}}" = "/" ]; then
if [ ! -x $var ]; then
return 1
fi
elif ! in_path $var "$PATH" ; then
return 2
fi
fi
}
if [ $# -ne 1 ]; then
echo "使用: $0 command" >&2
exit 0
fi
if [ "$BASH_SOURCE" = $0 ] ; then
checkForCmdInPath "$1"
case $? in
0)
echo "$1 found in path" ;;
1)
echo "$1 not found in path or not excutable" ;;
2)
echo "$1 found in PATH" ;;
esac
fi
exit 0
#!/usr/bin/env bash
# 确保输入内容只是字母和数字
validAlphaNum(){
## 如果输入的数据全是字母和数字 返回 0 否则 返回 1
# [:alnum:] -- POSIX 正则表达式简写 -- 代表字母数字字符
validchars="$( echo $1 | sed -e 's/[^[:alnum:]]//g' )"
echo $validchars
echo $1
if [ "$validchars" = "$1" ]; then
return 0
else
return 1
fi
}
## 主脚本开始 引用次脚本 直接 注释以下内容
/bin/echo -n "Enter input:"
read input
## 输入验证
if ! validAlphaNum "$input"; then
echo "您输入的内容不是字母和者数字" >&2
exit 1
else
echo "正确输入 "
fi
exit 0
#!/usr/bin/env bash
## echo 追加内容到文件尾
echo '
export NVM_DIR="/Users/huhongyun/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh" # This loads nvm
export PATH="/usr/local/opt/qt/bin:$PATH"
' >> test.txt
#!/usr/bin/env bash
# 月份 三个字母
monthNumToName() {
case $1 in
1) month="Jan"
;;
2) month="Feb"
;;
3) month="Mar"
;;
4) month="Apr"
;;
5) month="May"
;;
6) month="Jun"
;;
7) month="Jul"
;;
8) month="Aug"
;;
9) month="Jan"
;;
10) month="Oct"
;;
11) month="Nov"
;;
12) month="Dec"
;;
*) echo "$0 未知的月数数字 $1" >&2
exit 1
esac
}
## 主脚本开始
if [ $# -eq 1 ]; then
set -- $(echo $1|sed 's/[\/\/]/ /g')
fi
if [ $# -ne 3 ]; then
echo "格式是 August 3 1962 和 8 3 1962" >&2
exit 1
fi
if [ $3 -le 99 ]; then
echo "$0 预测是四位数的年份"
exit 1
fi
if [ -z $(echo $1 | sed 's/[[:digit:]]//g') ]; then
monthNumToName $1
else
# 规范前三个字母 首字母大写 其余小写
month="$(echo $1|cut -c1|tr ':[lower]:' ':[upper]:')"
month="$month$(echo $1|cut -c2-3 | tr '[:upper:]' '[:lower:]')"
fi
echo $month $2 $3
exit 0
#!/usr/bin/env bash
## 格式化给定的数字 以逗号分隔符显示
## 可接收两个参数 DD TD
nicenumber(){
integer=$(echo $1|cut -d. -f1)
decimal=$(echo $1|cut -d. -f2)
# 检查数字是否为整数
if [ "$decimal" != "$1" ]; then
result="$DD:='.'$decimal"
fi
thousands=$integer
while [ $thousands -gt 999 ]; do
remainder=$(($thousands % 1000))
# 包含三维数字 是否需要添加0?
while [ ${#remainder} -lt 3 ]; do
# 加入前导数字0
remainder="0$remainder"
done
# 从右向左构建最终结果
result="${TD:=","}${remainder}${result}"
thousands=$(($thousands / 1000))
done
nicenum=${thousands}${result}
if [ ! -z $2 ]; then
echo $nicenum
fi
}
# 主脚本开始
# ===================
while getopts "d:t:" opt; do
case $opt in
d) DD="$OPTARG"
;;
t) DD="$OPTARG"
;;
esac
done
shift $(($OPTIND -1 ))
## 输入验证
if [[ $# -eq 0 ]]; then
#statements
echo "Usage :$(basename $0) [-d c ] [-t c] numbric_value"
echo "-d 指定小数点分隔符 (默认 '.')"
echo "-t 指定数千个分隔符 (默认 ',')"
exit 0
fi
nicenumber $1 1 ## 第二哥参数强制
exit 0
#!/bin/bash
# validint--验证整数输入,也允许使用负整数。
validint()
{
# 验证第一个字段并针对最小值$2和/或测试该值
# 最大值 $3 ,如果他们已经被提供了: 如果该值不在范围内或
# 它不是仅由数字组成,失败。
number="$1"; min="$2"; max="$3"
if [ -z $number ] ; then
echo "You didn't enter anything. Please enter a number." >&2 ; return 1
fi
# 第一个字符是“-”符号吗?
if [ "${number%${number#?}}" = "-" ] ; then
testvalue="${number#?}" # 捕获除第一个字符以外的所有字符进行测试。
else
testvalue="$number"
fi
# 创建没有数字的数字版本,以进行测试。
nodigits="$(echo $testvalue | sed 's/[[:digit:]]//g')"
# 检查非数字字符。
if [ ! -z $nodigits ] ; then
echo "无效的数字格式!仅数字,无逗号,空格等" >&2
return 1
fi
if [ ! -z $min ] ; then
# 输入是否小于最小值?
if [ "$number" -lt "$min" ] ; then
echo "$number 太小了: 最小可接受值为 $min" >&2
return 1
fi
fi
if [ ! -z $max ] ; then
# 输入是否大于最大值?
if [ "$number" -gt "$max" ] ; then
echo "您输入的值太大:可接受的最大价值是:$max" >&2
return 1
fi
fi
return 0
}
# 输入验证
if validint "$1" "$2" "$3" ; then
echo "输入是您约束内的有效整数"
fi
#!/usr/bin/env bash
var="something wocked this way comes "
echo ${var:10}
echo ${var:0:1}
echo ${var:10:6}