第一天的學習就遇到了我最為頭疼的內容--二進制和十進制
作為一個純文科出身的我最頭疼的就是數字,就是運算,即便他們說那是簡單的,在我看來還是難,不知道什么時候能夠不再為此頭疼,肯定需要找個時間來補一下這方面的知識的。
今天老師講的主要是運算命令和控制命令,還留了幾道作業,當時就懵逼了,不知如何下手,到現在為止我的能力僅限于照著別人敲好的代碼再敲一遍,讓我自己寫是寫不出的,就相當于沒有自己的思路,不知道怎么開始,老師講的也很直接的說了,要是做不了就把白天的內容復習一遍,待會過一遍今天的內容再看一下能否做作業或者能夠做到什么程度吧。
老師接著昨天的命令給我們繼續講的:
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>將這個命令全局有效
如果 賬號密碼不為空
就
把信息發信給服務器
否則
提示不能為空
老師一天講了那么多,還沒開始消化呢,又布置那么多作業,掃了一眼作業發現無從下手,只能默默整理筆記了,希望老師明天能夠帶著我們完成這些作業