linux系统shell知识点,shell知识点

0.linux启动的步骤

设备加电----》BIOS自检-----》grub引导启动-----》加载内核----》系统初始化----》用户登录

1.文件目录大致结构

/:根目录

/bin:存储命令,/usr/bin存放用户命令

/root:超级管理员用户主目录

/etc:系统相关配置的文件

/home:家目录,存放用户的

/lib:共享库目录

/dev:设备目录

/mnt:一般作为挂载目录

2.终端的打开

1>ctrl+alt+t

2>点击左上角的搜索按钮,输入terminal,出来一个终端选项

注意:点击左边图标终端,将终端lock在桌面的左边

3.关机

1>右上角

2>在终端下怎么关机

(1)sudo shutdown -h now

(2)sudo init 0

(3)sudo reboot重启

3>关闭终端

exit

4>怎么获取超级管理员权限

su

?如果认证失败

(1)sudo passwd进行修改超级用户管理员权限的密码

5>超级用户管理员----》普通用户

exit

4.修改登录/用户密码

sudo passwd XXX用户

5.shell基本命令

1>pwd:present work directory显示当前的工作路径

2>ls:list显示当前工作路径下的目录或者文件

ls:显示当前目录下所有文件

ls -l:显示当前目录下所有文件并且告知文件的相关属性

ls -a:显示当前目录下所有文件(包括隐藏文件:点开头)

ls -al:集合上面两个特性

ls +具体路径:显示具体目录下的子文件或子目录

3>清空终端屏幕

(1)clear

(2)control + l

4>切换目录

cd:change directory:改变工作路径

cd +具体路径:切换到具体路径下面

cd:切换到用户主目录下

cd .:点代表当前路径

cd ..:点点代表当前目录的上一层目录

cd :代表用户主目录/home/xx用户

cd -:代表回到上一次操作的目录

5>Tab键使用

补全当前系统下已有的shell命令,补全文件名

6>新建目录

mkdir:make directory:创建目录

mkdir +文件名:在当前工作路径下创建目录文件

mkdir -p 1010/1009:创建1010目录的同时创建1009目录

7>删除目录

rmdir:remove directory:删除目录

rmdir +目录名:删除空目录,不能删除非空目录

rm -r +目录名:删除非空目录

8>创建文件

touch:创建普通文件

touch + 文件名:在当前目录下创建普通文件

9>删除文件

rm +文件名:在当前目录下删除对应的文件

10>拷贝文件

cp:copy拷贝文件

cp 要拷贝的文件 拷贝到哪个目录下

11>移动或者是重名命

mv:move移动文件

mv 要移动的文件 移动到哪个目录下

mv 要修改的文件 新的文件名

12>查看文件内容不需要打开文件

cat 文件名

13>

sudo apt-get install xxx包 安装相关软件

sudo apt-get update 更新数据源

sudo apt-get remove xxx包 卸载相关软件

14>文件权限修改

rw- r-- r--

分析:

(1)第一个字母决定文件是什么文件

-:代表普通文件

d:代表是目录文件

(2)第二个字母~第四个字母,决定文件属主用户对其文件执行的权限rwx;

r:可读

w:可写

x:可执行

(3)第五个字母~第七个字母,决定与属主用户同组的其他用户执行的权限

(4)最后几个字母,决定与属主用户不同组的其他用户执行的权限

(5)chmod使用

chmod 744 1.sh

chmod u+x 1.sh

chmod u+x,g+w,o+w 1.sh

u:user代表属主用户

g:group同组的其他用户

o:other不同组的用户

a:all代表所有人,不写默认为a

+:代表加某个权限

-:代表减掉某个权限

6.vi

1>是什么

vi是一个文本编辑器

vim是vi的升级版本

2>怎么安装

sudo apt-get install vim

如果遇到?E:no package...问题,解决之道

sudo apt-get update

3>vim使用

(1)打开文件

vim 1.sh

(2)插入数据

按下i键,等待左下角出现insert字样时,开始写数据

(3)保存

按下ESC键,进入一个非可编辑模式,shift+:;输入w表示保存;

(4)退出

按下ESC键,进入一个非可编辑模式,shift+:;输入q表示退出;

4>退出的方式

注意点:一定要在非可编辑模式下进行操作

(1):w保存

(2):q退出

(3):wq保存并退出

(4):q!不保存退出

(5):wq!忽略之前保存的内容

5>vim快捷键

注意点:一定要在非可编辑模式下进行操作

u:撤销上一次的操作

dd:删除光标所在的一行

yy:复制光标所在的一行

p:粘贴到光标所在行的下一行

2 dd:删除从光标起数两行

2 yy:复制从光标起数两行

如果要删除/复制多行,在非可编辑模式下进行操作,按下shift+v进入可视化模式,上下键选择要删除/复制的部分,按d/y键;

6>vim简单配置

cd /etc/vim

sudo vim vimrc

来到最下面按i键进入插入模式

set mouse=a 鼠标选中

set nu 显示行号

syntax on 语法高亮

set autoindent 自动缩进

set tabstop=4 缩进tab键字符宽度

进行保存退出

7.gedit

1>是什么

gedit是一个文本编辑器

8.shell脚本执行

1>chmod +x xx.sh

./xx.sh

2>sh xx.sh

注意点:最好使用第一种

9.注释

:代表注释单行

10.shell脚本的特点

1>shell脚本是一个弱类型的语言,不需要指定数据类型

2>如果变量没有定义,那么这个变量默认为空

3>如果shell脚本文件某一行出错,不会影响我整个程序的运行

11.标识符的命名规范

硬性规范

1>不能数字开头,

2>只能由字母,下划线,数字构成

3>不能与shell脚本的关键字相同if printf echo case等

建议:

1>不准用拼音,多查字典

2>建议使用驼峰命名规范numOfStudent

3>见名知义

12.变量

1>变量的定义

变量=值

注意点:

(1)变量一定义出来,就必须给他一个值,否则语法错误

(2)=号左右两边不能有空格

(3)如果右边是字符串,用""括起来

2>变量的使用

(1)以$符号开头

(2)加{},不是(),为了分清变量

3>变量的删除

(1)unset:删除变量,不需要加$,

(2)变量删除之后,这个变量默认为空

4>只读变量

(1)readonly value=7,表明这个变量将来不能被重新赋值

(2)readonly修饰的变量不能被unset删除

13.echo用法

echo:表示输出命令,输出echo后面的内容,会自动换行

1>echo后面是否加"",'',不加

(1)加''

''里面写什么输出什么

value="hello"

echo '$value'

输出结果是$value

(2)不加

降低程序的可读性

(3)加""

能避免上面两个缺点

2>shell转义字符

\n:代表换行

\t:相当于敲了一个tab键的宽度

\c:不换行,关闭echo命令本身换行的功能

3>echo -e开启转义

(1)如果是./xx.sh运行shell脚本,必须开启转义

value="hello"

echo "$value\n"是不会换行的

开启转义对特殊字符进行处理

echo -e "${value}\n"

(2)如果是sh xx.sh运行shell脚本,不需要开启转义

value="hello"

echo "$value\n"是会换行的

14.字符串相关处理方法

1>计算字符串长度

value="hello"

length=${#value}

echo "${length}"

2>字符串拼接

value1="hello"

value2="world"

value3="${value1} ${value2}"

echo "${value3}"

3>字符串截取

value1="hello world"

value2=${value1:6:5} #字符串是从0开始,从字符串哪个位置截取,截取的长度

echo "${value2}"

15.printf

value=“hello”

printf “value=%s\n” “${value}”

1>用法:printf是输出“”里面的内容,

%s:是一个占位符,严格意义上来说是输出字符串类型的,

%f:是一个占位符,后面必须是小数类型的数值占位

%d:是一个占位符,后面必须是整数类型的数值占位

%c:是一个占位符,后面必须是字符类型的数值占位

\n:转义字符

2>如果想用printf同时输出多个变量的值

value="hello"

value1=8

printf "value=%s\nvalue1=%d\n" "${value}" "${value1}"

3>

%.3f:表明小数点后面保留3位

%6.3f:6表明整个数据所占宽度为6个字符,如果不够,在左边以空格补全

%m.nf:右对齐

(1)如果m<=n+1+整数实际所占个数,m无效

(2)如果m>n+1+整数实际所占个数,m才会出现一定的效果

%-m.nf:左对齐

%md:

%ms:

%mc:

16.read

printf "请输入一个值:"

read value

printf "这个值=%s\n" "${value}"

1>用法:从键盘读入一个值,赋给read后面的变量

2>注意:read尽量不要使用同时输入多个值,比如read value1 value2

17.运算符

1>算数运算+ - \* / %

注意点:

(1)expr是计算整数类型的数据

(2)运算符左右两边都必须要有空格

(3)和$()都是取结果集 (4)注意乘法*必须要通过\\转义,不然会出错 (5)和$()不但可以取整数运算的结果集,还可以取shell命令的结果集,比如:result=ls

(6)result=expr $num1 % $num2求num1/num2=商。。。余数(result)

案例:

num1=1

num2=2

num3=expr $num1 \\* $num2

echo "${num3}"

2>整数之间的关系运算符

\> \< \>= \<= != ==

-gt -ge -lt -le -eq -ne

(1)在关系运算符中,运算的结果是一个逻辑值。如果关系表达式成立,逻辑值为1;否则为0

(2)>,=,<=都必须要用\进行转义

(3)!=可以用\进行转义,也可以不用\转义(根据编译器决定)

(4)\=,=,\==,==(根据编译器决定)macOs支持=,\=

注意:整数运算可以用$(())

比如:

1 num1=1

2 num2=2

3 num3=$((num1+num2))

4 echo "${num3}"

3>字符串运算符

=:判断字符串是否相等

!=:判断字符串是否不相等

-z:zero,判断字符串是否为空(没有字符)或者是不存在或者字符串都是空格

案例:

1 string1="hello"

2 string2="hello"

3 if [ $string1 != $string2 ]

4 then

5 echo "not equal"

6 else

7 echo "equal"

8 fi

4>文件运算符

-d:表示判断是否是目录文件

-f:表示判断是否是普通文件

-r:判断文件是否可读

-w:判读文件是否可写

-x:判断文件是否可执行

-e:exist,判断文件是否存在

案例:

1 file="1.sh"

2 if [ -d $file ]

3 then

4 echo "目录文件"

5 else

6 echo "不是目录文件"

7 fi

案例:

1 file="11"

2 if [ -f $file ]

3 then

4 echo "普通文件"

5 else

6 echo "不是普通文件"

7 fi

案例:

1 file="1.sh"

2 if [ -e $file ]

3 then

4 echo "存在"

5 else

6 echo "不存在"

7 fi

/*

伪代码(能体现解题思路)

练习1:

~:/home/ccj

判断~/share目录文件是否存在,如果不存在就创建这个文件;如果存在,提示文件已存在的信息

1 file="/Users/ccj/share"

2 if [ -e $file ]

3 then

4 echo "我在"

5 else

6 mkdir $file

7 fi

*/

5>逻辑运算符

&&:并且 if [[ expr $num % 5 == 0 && expr $num % 3 == 0 ]]

||:或者

!:非

-a:and:并且 if [ expr $num % 5 == 0 -a expr $num % 3 == 0 ]

-o:or:或者 if [ expr $num % 5 == 0 -o expr $num % 3 == 0 ]

案例:

1 echo "请输入一个数:"

2 read num

3 if [ expr $num % 5 == 0 ] && [ expr $num % 3 == 0 ]

4 then

5 echo "这是3,5的倍数"

6 else

7 echo "不是3,5倍数"

8 fi

案例:

1 echo "请输入一个数:"

2 read num

3 if [ ! $num -gt 8 ]

4 then

5 echo "<=8"

6 else

7 echo ">8"

8 fi

用法:

事件1&&事件2:事件1成立并且事件2成立,整个事件才成立,否则整个事件不成立

事件1||事件2:两个事件只要有一个事件成立,整个事件就成立。

/*

练习:求输入的年份是否是闰年?,如果是闰年给出相应的提示

(1)4整除,且不被100整除

(2)400整除

条件1或者条件2

1 echo "请输入年份:"

2 read year

3 if [[ expr $year % 4 == 0 && expr $year % 100 != 0 ]] || [ expr $year % 400 == 0 ]

4 then

5 echo "闰年"

6 else

7 echo "不是闰年"

8 fi

*/

18.let关键字

num1=1

num2=2

let num3=num1+num2

echo “${num3}”

1>用在哪些运算符

算数运算符:+ - * / % ++ —

赋值运算符:+= -= *= /= %=

关系运算符:== !=

(1)后缀++

num1=1

let num3=num1++ #num3=num1,num1=num1+1

echo "num3=${num3}"

echo "num1=${num1}"

(2)前缀++

num1=1

let num3=++num1

num1=num1+1,num3=num1

echo "num3=${num3}"

echo "num1=${num1}"

(3)后缀—

num1=1

let num3=num1—

num3=num1,num1=num1-1

echo "num3=${num3}"

echo "num1=${num1}"

(4)前缀—

num1=1

let num3=—num1

num1=num1-1,num3=num1

echo "num3=${num3}"

echo "num1=${num1}"

(5)+=

num1=4

num2=2

let num1+=num2 #num1=num1+num2

echo "${num1}"

19.条件语句

1>语法格式

if []

then

语句体

fi

注意点:

(1)[]左右两边都要有空格

(2)关系运算符用-gt...表示

案例:

printf "请输入一个数:"

read num

if [ $num -gt 5 ]

then

echo "${num}"

fi

-gt:>

-ge:>=

-lt:<

-le:<=

-eq:==

-ne:!=

字母含义:

g:greater

t:than

e:equal

l:less

n:not

2>

if []

then

语句体1

elif []

then

语句体2

fi

案例:

printf "请输入一个数:"

read num

if [ $num -gt 5 ]

then

echo "${num}"

elif [ $num -le 5 ]

then

echo "这个数小于5"

fi

3>

if []

then

语句1

elif []

then

语句2

else

语句3

fi

4>总结if语句:

(1)else可以没有,如果有else,必须放在最后面,else下是没有then

(2)elif可以没有,必须要放在if else的中间任何位置

(3)if语句只能执行一个分支

(4)if的结束标志fi

/*

练习1:

输入两个整数,求其最大值

1 echo "请输入两个值"

2 read num1

3 read num2

4 if [ $num1 -gt $num2 ]

5 then

6 echo "max=${num1}"

7 else

8 echo "max=${num2}"

9 fi

*/

20.case

case 变量 in

值1)

语句体

;;

值2)

语句体

;;

esac

案例:

1 echo "请输入一个值:"

2 read num

3 case $num in

4 1)

5 echo "是1"

6 ;;

7 2)

8 echo "是2"

9 ;;

10 *)

11 echo "其他"

12 ;;

13 esac

注意点:

(1)结束标志必须是esac

(2)值1)和值2)可以相同

(3)如果值1)和值2)条件都不满足,这时会来到)

(4))你可以不写,但是如果要写就写在最后

(5)每一个分支结束之后都有一个;;

/*

练习1:

输入两个整数,再输入一个+ - * /运算符,根据运算符,来计算两个数运算的结果,使用case语句完成

1 printf "请输入两个数:"

2 read num1

3 read num2

4 printf "请输入一个运算符:"

5 read op

6 case $op in

7 "+")

8 printf "%d+%d=%d\n" "${num1}" "${num2}" "$((num1+num2))"

9 ;;

10 "-")

11 printf "%d-%d=%d\n" "${num1}" "${num2}" "$((num1-num2))"

12 ;;

13 "")

14 printf "%d%d=%d\n" "${num1}" "${num2}" "$((num1*num2))"

15 ;;

16 "/")

17 printf "%d/%d=%d\n" "${num1}" "${num2}" "$((num1/num2))"

18 ;;

19 *)

20 printf "其他字符\n"

21 ;;

22 esac

*/

21.数组

1>数组初始化

(1)一个变量一个变量进行初始化

array1[0]=8

array1[1]=9

注意点:一个一个变量进行初始化,可以间隔赋值,还可以不从位置0开始。比如:

array[1]=7

array[5]=8

(2)整体数组赋值

array=(1 2 3 4 hello)

2>数组元素访问

${数组名[下标]}

3>遍历数组里面所有的元素

${数组名[*]}

${数组名[@]}

22.while循环

while []

do

语句体

done

案例:

1 sum=0

2 i=1

3 while [ $i -le 100 ]

4 do

5 let sum=sum+i

6 let i++

7 done

8 echo "sum=${sum}"

/*

练习1:

求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}"

练习2:

打印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

练习3:

打印

/

row=1

while [ $row -le 4 ]

do

space=1

while [ $space -le $((4-row)) ]

do

printf " "

let space++

done

star=1

while [ $star -le $((2row-1)) ]

do

printf "*"

let star++

done

let row++

printf "\n"

done

23.shell参数

./xx.sh

$0:代表执行的文件./xx.sh

$1:代表执行的第一个参数

$2:代表执行的第二个参数

。。

$n:代表执行的第二个参数

$#:代表执行的参数个数,不包括命令本身

/*

练习:

写一个shell命令可以实现sh的功能

思路:

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

24.for循环

1>格式

for 变量 in 参数列表

do

语句体

done

2>用法解释:

参数列表为变量一次一次的赋值

案例:

2 for value in 1 2 3 4 5

3 do

4 echo "==${value}=="

5

6 done

案例:

1 value=ls

2 for file in $value

3 do

4

5 echo "===${file}==="

6

7 done

25.break

break:是跳出整个循环

案例:

1 i=1

2 sum=0

3 while [ $i -le 100 ]

4 do

5 if [ $sum -gt 55 ]

6 then

7 break

8 fi

9 let sum+=i

10 let i++

11

12 done

13 echo "sum=${sum}"

14 echo "i=${i}"

分析:

当i=11,sum > 55,sum=55

sum=sum+i,sum=55+11,i=12

用法:

(1)当碰到break时,直接跳出循环,break下面的语句不会被执行

(2)break只跳出最近的一层循环

(3)break只能用在循环中

26.continue

/*

1~20和,跳过所有个位为3的数

*/

案例:

1 i=1

2 sum=0

3 while [ $i -le 10 ]

4 do

5 if [ expr $i % 10 == 3 ]

6 then

7 let i++

8 continue

9 fi

10 let sum+=i

11 let i++

12

13 done

14 echo "sum=${sum}"

分析:

i=3时,if条件成立,执行continue,那么continue以下的语句就不会被执行,继续返回到while判断的语句看条件是否成立,如果成立继续执行

用法:

(1)当碰到continue时,跳出本层循环的当前一次循环,continue以下面的语句不会被执行

(2)continue只能用在循环中

27.死循环

while :

do

语句体

done

28.shell函数

1>什么时候用到函数?

(1)执行的功能类似

(2)根据实际需求

2>shell函数定义格式

function 函数名()

{

}

3>调用shell函数

函数名

4>函数参数传递

案例:

./xx.sh q w e

1 function test()

2 {

3 echo "$0"

4 echo "$1"

5 echo "$2"

6 echo "${10}"

7 echo "hello wo"

8 }

9 test 1 2 3 4 5 6 7 8 9 34

10 echo "$0"

11 echo "$1”

12 echo "$2”

分析:

(1)当参数作为shell函数参数传递时,当在函数里面接收n>=10个参数时,要加上${n};

(2)$0不是test,而是shell文件本身

(3)函数里面的$1与函数外面的$1不相同,但是函数里面的$0与函数外面的$0相同

5>函数返回值

案例:

1 sum()

2 {

3 num1=$1

4 num2=$2

5 let value=num1+num2

6 return $value

7 }

8 sum 1 2

9 echo "sum=$?"

10 sum 2 3

11 echo "sum=$?"

分析:

(1)函数如果是return出来的结果,我们用$?接收,$?是接收最后运行的一次脚本函数,

(2)如果return后面的值value>255,那么函数运行完之后用$?接收,$?=value%256

(3)怎么接收return出来的值比255大?解决之道:使用echo返回出来,函数外使用变量接收value=函数名,从而对value进行操作

(4)实际上echo是临时保存函数的结果集

案例:

1 test()

2 {

3 echo "hello world"

4 }

5

6 value=test

7 echo "test函数的返回值${value}"

6>函数里面可以嵌套函数的定义

a()

{

b()

{

}

}

分析:函数b在什么情况下会被调用?

先要调用a,因为a中有函数b的实现

7>条件函数

a()

{

if []

then

b()

{

echo “===b===”

}

else

c()

{

echo “===c===”

}

}

分析:函数b和函数c在什么情况下可以调用?

先运行函数a,应为a中有函数b和c的实现

在if语句条件成立时,实现函数b的定义;

其他情况,实现函数c的定义

shell函数总结:

(0)函数调用之前必须要有相应的函数定义

(1)function关键字可写可不写

(2)shell函数可以有return,也可以没有return

(3)如果是return出来的结果必须要用$?接收

(4)如果是echo保存的结果集,必须要用value=test取结果集接收

/*

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

2.万年历

输入查询年份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

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

*/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值