shell命令代码(万年历)

shell命令代码

1. ==万年历==

题目和思路:
输入查询年份2016,再输入查询月份9
1>1990.1.1星期一
2>查询范围1990.1.1之后查询
3>闰年判断条件(year%4==0&&year%100!=0)||(year%400==0)
思路:计算1990.1.1~2016.8.31所有的天数
     十月 2016
日 一 二 三 四 五 六
                   1
 2  3  4  5  6  7  8
 9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31


2.
1>输入方式:
(1)mycal    默认的当月月历
(2)mycal 2016     整个年份
(3)mycal 2016 10   


1.判断输入的参数的个数
0:
1:以后开发
2:
写一个函数

2.具体考虑
0:year=`date +%Y` month=`date +%m`
2:year=$1 month=$2



3.考虑计算实际天数
1990.1.1~2016.10.1

(1)是算1990.1.1~2015.12.31
(2)2016.1.1~2016.9.30


calWhat()
{
    year=$1
    month=$2
    if [ $year -lt 1990 ] || [ $month -lt 1 ] || [ $month -gt 12 ]
    then 
        echo "时间不符..."
    else
        i=1990
        allDay=0
        array=(0 31 28 31 30 31 30 31 31 30 31 30 31)
        while [ $i -lt $year ]
        do  
            if [ `expr $i % 4` == 0 -a `expr $i % 100` != 0 ] || [ `expr $i % 400` == 0 ]
            then
                let allDay+=366
            else
                let allDay+=365
            fi
            let i++
        done
        if [ `expr $year % 4` == 0 -a `expr $year % 100` != 0 ] || [ `expr $year % 400` == 0 ]
        then
            array[2]=29
        else
            array[2]=28
        fi
        i=1
        while [ $i -lt $month ]
        do
            let allDay+=array[i]
            let i++
        done
        let week=allDay%7
        let week=(week+1)%7 #当月的第一天
        echo -e "\\t\\t\\t${year}/${month}"
        echo -e "日\\t一\\t二\\t三\\t四\\t五\\t六"
        colum=0
        i=1
        while [ $i -le $week ]
        do
            printf " \\t"
            let i++
            let colum++
        done
        i=1
        while [ $i -le ${array[$month]} ]
        do
            printf "${i}\\t"
            let colum++
            if [ `expr $colum % 7` == 0 ]
            then 
                printf "\\n"
            fi
            let i++
        done
        printf "\\n"
    fi
    
}

if [ $# -eq 0 ]
then 
    argument1=`date +%Y`
    argument2=`date +%m`
    calWhat ${argument1} ${argument2}
elif [ $# -eq 1 ]
then
    echo "尽情期待..."
elif [ $# -eq 2 ]
then 
    argument1=$1
    argument2=$2
    calWhat ${argument1} ${argument2}
else
    echo "参数错误"
fi
    


2.自动产生当天的文件夹,供每天写代码使用


/*
1.自动产生当天的文件夹,供每天写代码使用
file=`date +%Y/%m%d`
echo "${file}"


~/practice/2016/10/1012
思路:
1>判断参数个数
xx.sh
xx.sh -y 
xx.sh -m
xx.sh -d

2>
0:-d
1:
>1:提示错误

3>如果参数是一个
-y
-m
-d


year=`date +%Y`
month=`date +%m`
day=`date +%m%d`
if [ $# -eq 0 ]
then 
    if [ -e ~/practice/$year/$month/$day ]
    then 
        echo "${day}文件已存在"
    else
        mkdir -p ~/practice/$year/$month/$day
    fi
    cd  ~/practice/$year/$month/$day
elif [ $# -eq 1 ]
then 
    case $1 in
    "-y")
        if [ -e ~/practice/$year ]
        then 
            echo "${year}文件已存在"
        else
            mkdir -p ~/practice/$year
            
        fi
        cd ~/practice/$year
    ;;
    "-m")
        if [ -e ~/practice/$year/$month ]
        then 
            echo "${month}文件已存在"
        else
            mkdir -p ~/practice/$year/$month
        fi
        cd ~/practice/$year/$month
    ;;
    "-d")
        if [ -e ~/practice/$year/$month/$day ]
        then 
            echo "${day}文件已存在"
        else
            mkdir -p ~/practice/$year/$month/$day
        fi  
        cd ~/practice/$year/$month/$day
    ;;
    *)
        printf "参数?"
        printf "用法[-y] [-m] [-d]\\n"
    ;;
    esac
else    
    echo "参数过多"
fi

3. 练习1:求1~100偶数和

#### 练习1:求1~100偶数和
求1~100偶数和
  1 sum=0
  2 i=1
  3 while [ $i -le 100 ]
  4 do
  5     if [ `expr $i % 2` -eq 0 ]
  6     then
  7         let sum=sum+i
  8     fi
  9     let i++
 10 done
 11 echo "sum=${sum}"
 12 echo "i=${i}"

3. 打印9X9乘法表

1X1=1
1X2=2 2X2=4
….
1X9=9 2X9=18  ….9X9=81
找规律:
1行1
2行2
n行n
  1 row=1
  2 colum=1
  3 while [ $row -le 9 ]
  4 do
  5     colum=1
  6     while [ $colum -le $row ]
  7     do
  8         let value=colum*row
  9         printf "%dX%d=%02d " "$colum" "$row" "$value"
 10         let colum++
 11     done
 12     printf "\\n"
 13     let row++
 14 done

4. 打印

  
   *
  ***
 *****
*******

row=1
while [ $row -le 4 ]
do
    space=1
    while [ $space -le $((4-row)) ]
    do
        printf " "
        let space++
    done
    star=1  
    while [ $star -le $((2*row-1)) ]
    do
        printf "*"
        let star++
    done
    let row++
    printf "\\n"
done

5../xx.sh


$0:代表执行的文件./xx.sh
$1:代表执行的第一个参数
$2:代表执行的第二个参数
......
$n:代表执行的第n个参数
$#:代表执行参数的个数,不包括命令本身

0.判断是否有参数,参数是否为1
1.判断文件是否存在
2.如果存在,判断文件是否为普通文件
3.改权限
4.运行
5.让这个命令在全局有效
chmod +x mysh
sudo cp mysh /bin/
if [ $# -eq 0 ]
then 
    echo "do what?"
elif [ $# -eq 1 ]
then
    if [ -e $1 ]
    then
        if [ -f $1 ]
        then
            chmod +x $1
            ./$1
        else
            echo "$1 is not file"
        fi
    else
        echo "$1:No such file or directory"
    fi
else
    echo "too much arguments"
fi

你可能感兴趣的:(shell命令代码(万年历))