学习笔记day10C语言:高级命令与shell-创新互联
1 写一个时钟
创新互联建站是一家专业提供库伦企业网站建设,专注与做网站、成都做网站、H5建站、小程序制作等业务。10年已为库伦众多企业、政府机构等服务。创新互联专业网站建设公司优惠进行中。#!/bin/bash
year=2022
month=12
day=15
hour=11
min=22
sec=15
flag=1
for((;;)){((sec++))
#((day++))
sleep 1
if [ $sec -eq 60 ]
then
sec=0
((min++))
fi
if [ $min -eq 60 ]
then
min=0
((hour++))
fi
if [ $hour -eq 24 ]
then
hour=0
((day++))
fi
if (( year%4==0 && year%100!=0 )) || (( year%400==0 ))
then
flag=1 #是闰年
else
flag=0 #不是闰年
fi
if [ $month -eq 1 -o $month -eq 3 -o $month -eq 5 -o $month -eq 7 -o $month -eq 8 -o $month -eq 10 -o $month -eq 12 ]
then #对于1、3、5、7、8、10、12月的天数判断
if [ $day -eq 32 ]
then
day=1
((month++))
fi
fi
if [ $month -eq 4 -o $month -eq 6 -o $month -eq 9 -o $month -eq 11 ]
then #对于4、6、9、11月的天数判断
if [ $day -eq 31 ]
then
day=1
((month++))
fi
fi
if [ $month -eq 2 ]
then #对于2月的天数判断 闰年29天 平年28天
if [ $flag -eq 1 ]
then
if [ $day -eq 30 ]
then
day=1
((month++))
fi
fi
if [ $flag -eq 0 ]
then
if [ $day -eq 29 ]
then
day=1
((month++))
fi
fi
fi
if [ $month -eq 13 ]
then
month=1
((year++))
fi
printf "%d-%02d-%02d %02d:%02d:%02d\r" $year $month $day $hour $min $sec
}
1 压缩与打包压缩的对象是文件
在ubuntu中,常用的压缩文件格式有.gz、.bz2、.xz等
分别使用 gzip/gunzip 、bzip2/bunzip2 、xz/unxz命令来进行压缩与解压缩
对于这三种格式,在压缩率上 .xz>.gz>.bz2,压缩速度 .xz>.gz>.bz2
压缩和解压缩这两种操作都会替换源文件
归档的对象是目录
通常使用tar命令进行归档
例如tar -cvf main.tar main 将main打包成main.tar
其中c表示创建归档文件,v表示显示过程,f表示后面跟文件名
可以在使用tar的同时将目录归档的同时压缩成文件。
使用-z: 压缩成gzip格式
-j: 压缩成bzip2格式
-J: 压缩成xz格式
2 什么是shell脚本Shell是一种脚本语言,那么,就必须有解释器来执行这些脚本,常见的脚本解释器有:
bash:是Linux标准默认的shell。bash由Brian Fox和Chet Ramey共同完成,是BourneAgain Shell的缩写,内部命令一共有40个。
sh: 由Steve Bourne开发,是Bourne Shell的缩写,sh 是Unix 标准默认的shell。
另外还有:ash、 csh、 ksh等。
3 shell脚本的使用1.文件的命名(结尾是.sh)
vim 01test.sh
2.脚本的第一行
#!/bin/bash: 标识解析此脚本的shell是bash
3.脚本文件是不需要编译的,直接由命令行解析器解析
4.执行脚本
./01test.sh (脚本需要有可执行权限)-->chomd a+x 01test.sh
bash 01test.sh
source 01test.sh
5.三种执行方式的区别
1)./执行脚本的时候需要可执行权限,而bash和source都不需要可执行权限
2)./和bash解析脚本的时候会新开子终端,在子终端中解析,将解析的结果返回到当前终端,source是直接在当前终端解析。
4 shell脚本中的变量1.变量不需要定义
2.变量没有对应的类型
3.变量赋值的时候直接写=(等号前后不能有空格)
4.在shell脚本中,所有的变量被赋的值都认为是字符串
5.赋值的区别如下
var1=123 -->字符串之间不能有空格
var1='123 456' -->可以有空格
var2="123 $var1" -->可以有空格,可以调用新的变量
6.变量的引用
$var1 ${var1}
7.使用echo来打印变量
echo $var1
8.通过位置变量可以进行命令行的传递参数
$0 //脚本的名字
$1 $2....$9 ${10}...${n} //参数对应位置的字符串
$@或$* //命令行传递的所有的参数(脚本名除外)
$# //命令行参数的个数
9.
unset 变量名 //清除变量的值
readonly 变量 //标识这个变量是只读的
5 shell中的运算shell中的变量被赋的值都是字符串,所以它不能够进行算术运算,如果想执行算术运算必须使用特殊的标识来完成。
(()) 整数运算
$[] 整数运算
expr 整数运算,字符串的运算
6 (())的使用(($va1 + $var2))
((va1+ var2)) #在(())内部变量可以有$,也可以没有$符号,在运算符前后可以加空格,也可以没有空格
sum=$((var++)) #如果要将一个表达式的结果赋值给变量,需要在(())前加$符号
tt=$((表达式1,表达式2,表达式3,...))#所有的表达式都会参与运算最后一个表达式的结果赋值给tt变量
在(())中可以做复杂的运算
for((i = 0; i< 100;i++))
{((sum+=i))
}
echo $sum
7 $[]的使用var1=12
ret=$[var1++]
echo $[var1++] #s[]一定需要有变量去承接结果,如果不使用变量去接收结果,就必须使用echo输出
ret=$[var2 + var3] #在$[]里面,可以有空格,也可以没有空格,可以有$,也可以没有$
#在$[]中不允许做复杂的运算,比如for循环
ret=$[var1++,var2++,3**5]
echo $ret #最后一个表达式的结果解释整个表达式的结果
8 expr的使用var1=12
var2=13
expr $var1 + $var2
[1]expr在运算完之后结果会自动显示
[2]expr在使用的变量的时候,变量前一定要有$符号
[3]运算符前后要加空格,如果不加空格,会出错
sum=`expr $var1 + $var2`
[4]如果要将expr的运算的结果给新的变量,需要使用置换
mul=`expr 6 \* 3`
[5]expr在进行*运算的时候,如果不使用转义符号,它认为是通配符号,不能进行乘法运算
注:var1=`ls`
var1=$(ls)
[6] 使用expr求字符串的长度
expr length $var2 #var2变量中不能有空格,否则会出现语法错误
[7] 使用expr在源字符串中查找子字符的位置
expr index $var1 "123" #从左往右进行匹配,返回一个符号字符的位置
[8]提取字符串
expr substr $var1 起始位置 提取的长度
[9] 字符串匹配
expr match $var1 "abc" #从左往右匹配,只要有任意一个匹配不上,则返回0,否则返回匹配上的个数
9 shell中的if语句if [ 判断条件 ] #--->这里 []可以写成test
then
#if成立执行的语句
fi
# if不成立执行的语句
if [ 判断条件1 ] # --->这里 []可以写成test
then
#判断条件1成立执行的语句
elif [ 判断条件2 ]
then
#判断条件2成立执行的语句
else
#上述都不成立执行的语句
fi
10 shell中对数字的判断-eq 等于
-ne 不等于
-gt 大于
-ge 大于等于
-lt 小于
-le 小于等于
你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧
网页名称:学习笔记day10C语言:高级命令与shell-创新互联
网站URL:http://scyanting.com/article/ccgigo.html