第一天的学习就遇到了我最为头疼的内容--二进制和十进制
作为一个纯文科出身的我最头疼的就是数字,就是运算,即便他们说那是简单的,在我看来还是难,不知道什么时候能够不再为此头疼,肯定需要找个时间来补一下这方面的知识的。
今天老师讲的主要是运算命令和控制命令,还留了几道作业,当时就懵逼了,不知如何下手,到现在为止我的能力仅限于照着别人敲好的代码再敲一遍,让我自己写是写不出的,就相当于没有自己的思路,不知道怎么开始,老师讲的也很直接的说了,要是做不了就把白天的内容复习一遍,待会过一遍今天的内容再看一下能否做作业或者能够做到什么程度吧。
老师接着昨天的命令给我们继续讲的:
8>echo命令的注意点
1)-e:代表开启转义,让他认识转义字符
2)转义字符
\c:是一个转义字符,原先是换行,加了之后可以不换行
\n:是一个换行转义字符
\t:是一个转义字符,相当于tab键
3)echo后面叫"",'',不加
'':不能达到取值的效果,不推荐使用
"":上面的缺陷都可以避免
4)如果使用sh xx.sh运行的方式,不需要开启转义,echo "hello\tword"
如果./xx.sh运行,需要开启转义,echo -e
9>字符串的相关操作
1)字符串长度计算
示例代码:
1 string=“hello”
2 length=${#string}
3 echo "${length}"
2)字符串的拼接
5 string1=“word”
6 string3=“${string} ${string1}”
7 echo "${string3}"
3)字符串的截取
10 string4="nihao"
11 string5=${string4:2:3}
12 echo "${string5}"
10>
%d:是一个占位符,是替整数类型的数据所占的位置
%c:是一个占位符,是替单个字母所占的位置
%f:是一个占位符,是替小数类型的数据所占的位置
%s:是一个占位符,是替字符串占的位置
%md
%mc
%ms
%m.nf
如果m<=n+1+整数的实际数的位数,m没有意义,相当于没写
如果m>n+1+整数的实际数的位数,左边用空格补全,默认是右对齐,如果想左对齐,加-:%-m.nf
注意点:任何数据类型都可以使用%s输出,但是字符串类型不能使用%d,%f,%c输出
11,整数运算
算数运算:+ - \* / % ++ ——
简单案例
1 num1=1
2 num2=2
3 num3=`expr ${num1}+${num2}`
4 echo "${num3}"
后缀++
先赋值,后进行自加1
num1=4
let num2=num1++
echo "num1=${num1},num2=${num2}"
结果:num1=5,num2=4
后缀--
先赋值,后进行自减1
num1=4
let num2=num1--
echo "num1=${num1},num2=${num2}"
结果:num1=3,num2=4
前缀++
先进行自加1,后赋值
num1=4
let num2=++num1
echo "num1=${num1},{num2}=${num2}"
结果:num1=5,num2=5
前缀--
先进行自减1,后赋值
num1=4
let num2=--num1
echo "num1=${num1},num2=${num2}"
结果:num1=3,num2=3
如果上面的expr不好用,可以用$(())
关系运算
\> \< \>= \<= \= = \!= != == \==
关系运算产生结果是一个逻辑结果,逻辑结果有1和0
0代表这个逻辑错误的,1代表是这个逻辑是正确的
逻辑运算符
&&:事件1 并且 事件2
如果事件1 并且 事件2成立,整个事件才成立;否则整个事件就不成立
代码示例:
1 read num
2
3 #if [ `expr ${num} % 3` == 0 ]&&[ `expr ${num} % 5` == 0 ]
4 if [[ `expr ${num} % 3` == 0 && `expr ${num} % 5` == 0 ]]
5 then
6 echo "3,5的倍数"
7 else
8 echo "就不是3,5的倍数"
9 fi
||:事件1 或 事件2
只要有一个事件成立,整个事件就成立
3 #if [ `expr ${num} % 3` == 0 ]||[ `expr ${num} % 5` == 0 ]
4 if [[ `expr ${num} % 3` == 0 || `expr ${num} % 5` == 0 ]]
字符串运算符
=、!=、
-z $str:判断字符串是否存在,或者字符串是否都为空格
$str:判断字符串不为空
1)示例代码
1 string="123"
2 string1="123"
3 if [ ${string} != ${string1} ]
4 then
5 echo "不相等"
6 else
7 echo "相等"
8 fi
2)示例代码
1 string=" "
2 if [ -z ${string} ]
3 then
4 echo "为空"
5 else
6 echo "非空"
7 fi
8
9 string1="xxx"
10 if [ $string1 ]
11 then
12 echo "非空"
13 else
14 echo "为空"
15 fi
文件运算符
-e:exist判断文件是否存在
-d:directory判断文件是否是目录文件
-f:file判断一个文件是否是普通文件
-r:read判断当前文件是否有读取权限
-w:write判断文件是否有写入权限
-x:判断文件是否有可执行权限
1)代码示例
1 if [ -f ~/practice1 ]
2 then
3 echo "是目录"
4 else
5 echo "不是"
6 fi
2)示例代码
8 if [ -x ./19.sh ]
9 then
10 echo "有执行权限"
11 else
12 echo "没有"
13 fi
12``和${}的作用:取出结果集,可以是命令的结果集,还可以是运算的结果
13、let关键字
1 num1=1
2 num2=2
3 let num3=num1+num2
4 echo "${num3}"
13,输入一个变量
实例代码
read num
printf "${num}"
注意点:输入多个值的时候,尽量使用
read num
read num1
14,三大流程控制
1>顺序流程控制
2>条件流程控制
1)
if [ 条件 ]
then
语句体
fi
2)
if [ 条件 ]
then
语句体
else
语句体
fi
3)
if [ 条件 ]
then
语句体
elif
then
语句体
elif
then
语句体
else
语句
fi
注意点:
1)[]左右两边都要有空格
2)else可以没有,也可以有,但是必须放在最后面
>:gt
>=:-ge
<:-lt
<=:-le
==:-eq
!=:-ne
g:grater
t:than
l:less
e:equal
eq:equal
n:not
case语句:
case变量 in
值1)
语句体
;;
值2)
语句体
;;
值3)
语句体
;;
值*)
语句体
;;
esac
注意点:*)可以没有,如果有必须写在最后面,*)代表通配任何内容的值
/*
输入两个整数,再输入一个运算符,根据运算符的不同对两个数进行计算,输出运算结果,用case语句实现
*/
3>循环流程控制
while [ 条件 ]
do
语句体
done
练习:
1)求1~100的偶数和,输出
晚上作业:
1>写一个命令求阶乘或是求和,比如说命令运行:
./xx.sh 6! 如果是这样运行就执行阶乘6x5x4x3x2x1
./xx.sh 6+ 如果是这样运行就执行阶乘6+5+4+3+2+1
./xx.sh -s 6
./xx.sh -f 6
./xx.sh -sf 6
2>打印菱形,用while
*
***
******
*********
******
***
*
3>使用while循环打印如图所示的直角三角形
*
**
***
****
*****
******
4>
1x1=1
1x2=2 2x2=4
1x3=3 2x3=6 3x3=9
······
1x9=9 2x9=18 3x9=27 4x9=36 ······9x9=81
5>创建当天的文件夹
myfile -y ~/practice/2017/
myfile -m ~/practice/2017/01
myfile -d ~/practice/2017/01/0104
~/practice/2017/01/0104 #年份文件/月份文件/当天日期的文件夹
拿到年:date +%Y
拿到月:date +%m
拿到日:date +%d
15、环境变量
$#:指的是shell命令参数的个数,不算命令本身
$0:代表命令本身
$1:代表命令第一个参数值
$2:代表命令第二个参数值
···
$n:代表命令第n个参数值
如果n>=10,必须要用${n}去取值
怎么自己写一个解析xx.sh文件的脚本
思路:
1>判断执行哪个文件
2>参数不能太多
3>判断该文件是否存在
4>判断是否是普通文件
5>判断该文件是否是以.sh结尾的文件
6>chmod +x xx.sh
7>./xx.sh
8>将这个命令全局有效
如果 账号密码不为空
就
把信息发信给服务器
否则
提示不能为空
老师一天讲了那么多,还没开始消化呢,又布置那么多作业,扫了一眼作业发现无从下手,只能默默整理笔记了,希望老师明天能够带着我们完成这些作业