当前位置: 首页 > 工具软件 > Wicked Shell > 使用案例 >

shell脚本学习笔记1

荣德厚
2023-12-01
--脚本源于《Wicked Cool Shell Scripts: 101 Scripts for Linux, Mac OS X, and Unix Systems》

--chapter1 #3 Normalizing Date Formats

#!/bin/sh

# normdate -- Normalizes month field in date specification
# to three letters, first letter capitalized. A helper
# function for Script #7, valid-date. Exits w/ zero if no error.

monthnoToName()
{
  # Sets the variable 'month' to the appropriate value
  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="Sep"    ;;  10) month="Oct"    ;;
    11) month="Nov"    ;;  12) month="Dec"    ;;
    * ) echo "$0: Unknown numeric month value $1" >&2; exit 1
   esac
   return 0
}

## Begin main script

if [ $# -ne 3 ] ; then
  echo "Usage: $0 month day year" >&2
  echo "Typical input formats are August 3 1962 and 8 3 2002" >&2
  exit 1
fi

if [ $3 -lt 99 ] ; then
  echo "$0: expected four-digit year value." >&2; exit 1
fi

if [ -z $(echo $1|sed 's/[[:digit:]]//g') ]; then
  monthnoToName $1
else
  # Normalize to first three letters, first upper, rest lowercase
  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

知识要点:
1.exit命令与 “?”
exit命令用于终止脚本并返回命令行,以使脚本在某些情况下发生时退出。传给exit命令的参数是一个0~255之间的整数。
如果程序返回退出状态为0,则表示程序成功退出。如果非0则表示遇到了某种失败。传给exit命令的参数保存在shell的变量"?"中($?)。


2.条件判断中内置test操作
A、整数测试
-eq  等于
-ne  不等于
-gt  大于
-ge  大于或等于
-lt  小于
-le  小于或等于


3.sed字符串替换模式
sed 's/regrxp/replacement/[g p w n]'
选项说明:
s  提示sed这是一个替换操作,并查询regrxp,成功后用replacement替换它。
g 缺省情况下只替换第一次出现模式,使用g选项替换全局所有模式。
p 缺省情况下sed将所有被替换行写入标准输出,加p选项后将使n选项失效。
n 不打印输出结果
w 文件名  使用此选项将输出定向到一个文件


例子:
--把除大写字母,逗号及顿号之外的字符剔除
sed 's/[^[:upper:] ,.]//g'
--把除数字,左括号及右括号之外的字符剔除
sed 's/[^[:digit:]\(\)- ]//g'
--把除数字之外的字符剔除
sed 's/[^[:digit:]]//g'


4.tr命令
tr '[:lower:]' '[:upper:]'  --把小写字符剔除
tr '[:upper:]' '[:lower:]'  --把大写字符剔除


5.条件结构与控制流语句
case 变量 in
   值1)命令(命令组)
   ;;
   值2)命令(命令组)
   ;;
   ...
   *)命令(命令组)

   ;;

esac

 类似资料: