Shell入门01
Shell入門
1.基于硬件的虛擬化
2.基于平臺的虛擬化
3.基于服務的虛擬化
4.基于庫的虛擬化
5.基于操作系統的虛擬化
管理員使用Shell程序與操作系統進行交互,之前學習的shell腳本都是以單行命令來執行的,缺乏邏輯關系,將單行的命令統一并建立邏輯關系的過程,就是shell腳本編程。
Sum _ = 0
For I in range(1,101):
???????? Sum_? += i
Print(sum_)
--------------------------------------------------------------------
sum_= 0
for i in $(seq 100);do
…………..
done
輸出echo
?
格式化輸出 awk – printf
與其他編程語言的區別:使用shell來實現linux的批量管理,而不是去開發應用程序
學習內容:shell(python、perl、)
Pip install ipython----交互式工具執行單行命令比較方便
1.bash的基本特性
python可以通過調用庫來實現各種行業的需求
ctrl + l
上鍵
History
2.IO重定向與管道符---shell的功能特性?? 命令是一個可執行的二進制程序
???????? Which ls
3.編程基礎
???????? 程序是什么?----程序是執行以某個功能的代碼,而算法是程序中的其中一種。
???????? #/!bin/bash ------制定解釋器
Path路徑來執行shell? ./aa.txt
變量:是指一段命名的內存空間
數據有變量來提供
指令---命令
???????? 程序必須包含 指令 + 數據?????? + (邏輯關系)
編程原理----面向對象()和面向過程?
4.!!!!!!!!!!!!!!!!grep和正則表達式!!!!!!!!!!!!!
???????? Linux三劍客 **grep過濾(行)
Pattern“模式”
5.語句的邏輯關系
分支
if
?
循環
for? 工作中常用—不容易進入死循環? 放入for循環的列表
while 指定初始值,循環條件為True 不要進入死循環
until 與while相反 循環條件為False不要進入死循環
?
case------**編寫linux的程序啟動腳本**
?
打斷循環的語句
break 跳出循環
continue跳出當前循環
exit 退出當前程序,指定程序的返回值
echo $? 命令執行情況
?
read –--input()
echo---print()
?unix bsd
6.**變量**
network:宣告路由,讓路由器發送helllo包,攜帶路由信息,組播
Linux三劍客
???????? **sed---編輯器? stream edit d。。 流編輯器
???????? 數據存儲在磁盤里就是“流”
換行 輸出數據時手動添加/n,計算機識別后展示
流設備基于流編輯器。。。
兩種模式的切換
???????? **awk 報告生成器-----一個獨立的編程語言
函數? ----- 一段固定功能的代碼塊
數組? ---- 列表、元組、字典
字符串----- 字符串的處理太復雜 方法多
重復:必須連續且相同的數據 先排序再去重(Sort 去重)
練習:
?
line = `wc –l /etc/inittab | cat –d’ ’ –f1 `? 查看行數
echo $line
cat –n /etc/inittab
if test $line -gt 100 ;then???????????????????? if [ $line -gt 100 ];then
???????? echo “ /etc/inittab is a big file ”????????????????? echo “ /etc/inittab is a big file ”
else???????????????? ????????????????????else
???????? echo “/etc/inittab is a small file”????????????????? echo “/etc/inittab is a small file”
fi??????????????????????????????????????? fi
test 相當于一個[]? test $line –gt 100 ==[$line –gt 100]
-gt ----大于
bash的基本特性
linux的時間:系統時鐘和硬件時鐘
系統時間—date
硬件時間---clock? hwclock
1.命令歷史? 根----加載驅動
???????? 作用:查看之前使用的命令
關于命令歷史的文件------每個用戶家目錄下面的.bash_history
??????????????????????????????????????????? ? 在關機的時候,會自動寫入一次
history是內置命令 history –r 將內存中的命令歷史寫入文件
useradd xls –l
echo “123456” | passwd –stdin(標準輸入) “xls -l”
cd /home/xls-l
ls
ls -a
關于命令歷史的變量(環境變量) path只是環境變量的一種???? chroot 切換文件根目錄
???????? Env?? ?//查看環境變量
Set??? //查看更加詳細的環境變量參數
HISTSIZE = 1000? 總量是1000條歷史命令。超過1000刪除重存
HISTCONTROL = ignoredups/ignorespace/ignoreboth
?
Set|grep“HIST”
History的常見操作
???????? 查看命令歷史
???????? !+編號----!#---執行#號行的命令(#表示數值)
???????? !+string----匹配最近一次的字符串
???????? !!-------上一條命令
???????? *!$*------- 上一條命令的最后一個參數
????????????????? ls /etc == ls !$
????????????????? ESC+.---上一條命令的最后一個參數
???????? 常見的選項:
???????? -a? 追加歷史行到歷史文件
???????? -d? 刪除
???????? -c? 清空
???????? History # 顯示最近#行的命令
?
2.命令補全
Tab :擴展:制表符 \t 四個空格鍵
???????? ??????? ? 1.提示2.自動補全
3.目錄補全
???????? Tab 1.提示2.自動補全
4.命令展開—date命令
???????? {}
???????? Linux的目錄遵循的規則------FHS(文件系統層次化標準)目錄規則
?
Mkdir –pv mylinux{bin,boot/grub,dev,etc{/rc.d/init.d,sysconfig/network-scripts},lib/modules,lib64,proc,sbin,sys}
?
屬性一?????? 屬性二
A ?????????????1
B ?????????????2
Mkdir –pv /var/{a,b}-{1,2}
date、clock、hwclock
基于date命令來創建目錄文件
date +%F---改變date輸出的格式 –日期格式? 年-月-日 CCYY-mm-dd
date+%F-%H-%M-%S
%H---小時 hh
%M---分鐘 MM
%S---秒 ss
%T---hh:MM:ss
%D---mm/dd/CCYY(月/日/年)
%Y---顯示年份CCYY? %y
練習:
???????? 通過for語句循環創建一個月的日志文件;.log ?2019-08-06.log
???????? Crontab ?–e * * * * *(分、時、日、月、星期)
touch `date +%F`.http.log
for ?i ?in ?{1..30};do
???????? touch `date +%Y-%m-$i`.http.log
done
for ?i ?in ?{1..30};do? touch `date +%Y-%m-$i`.http.log; done --- 一行執行
tar
歸檔命令 壓縮解壓縮
壓縮工具 gzip、bzip、xz、zcat(不解壓查看壓縮文件)
文本文件壓縮效果較好,壓縮只能對文件進行操作,不能對目錄進行操作
Tar的常見參數:
???????? 歸檔工具???????
-j????? bzip2
???????? -J????? xz
???????? -z????? gzip
???????? -c???? create(壓縮)
???????? -x???? extract (解壓)//可以不用指定解壓的工具
???????? -f????? 指定文件名
???????? -v???? 顯示詳細信息 verbose
???????? -t????? 不解壓查看內容和zcat一樣
???????? Tar歸檔工具可以對目錄進行操作
gzip /etc/inittab
壓縮 tar cjvf 2019-08.http.log.bz2 2019-08-*.http.log
解壓 tar xvf 2019-08.http.log.bz2 ?–C abc
解壓可以不選擇解壓方式
.*---正則表達式 *---不是正則表達式
?
crontab ?–e * * * * *(分、時、日、月、星期) 寫全路徑 ?除/以外的符號都可以當作文件名
20 02 * * * /root/xxx.sh
編寫xxx.sh腳本文件
Vim xxx.sh
????????????????? #!/bin/bash
????????????????? #
????????????????? tar ?cJvf ?/var/`date +%F` .xz? /etc/
chmod +x xxx.sh
?
補充:
???????? clock、hwclock ---- 查看硬件時鐘(如何同步系統時鐘和硬件時鐘,以哪一個為準)
???????? cal??? 日歷 cal 1997
5.命令的執行狀態
???????? 在linux中,每一條命令執行后都會有兩個結果:
????????????????? 命令本身放回的內容
????????????????? 其次,命令執行的結果狀態
???????? $? 變量,就是用來存放命令執行狀態的變量;
????????????????? 0 表示成功的狀態(與python相反)
????????????????? 1-255 表示失敗的狀態
[$? –eq 0] && exit 0|| exit 1
?
在程序執行中,我們可以使用exit來手動制定返回的狀態碼
6.命令的快捷鍵
???????? Ctrl + l //清屏
???????? Ctrl + c
???????? Ctrl + u //刪除光標前的字符
???????? Ctrl + k //刪除光標后的字符
???????? Ctrl + a //光標頭
???????? Ctrl + e //光標尾
???????? Ctrl + e
???????? Ctrl + w //以空格為分隔符,去刪除文件
???????? Ctrl + r //搜索命令(進入交互式界面,搜索最近一次使用的命令要輸入字符串)
7.alias別名
?????? 系統啟動時讀取一些特殊文件的順序;
???????? alias 文件別名
???????? alias cdnet=”cd /etc/sysconfig/network-scripts”?? //這種方式定義的alias只能在當前shell使用
???????? pstree
???????? 如果想要別名所有人都可以使用,寫入下面兩個文件中
???????? /etc/profile?
???????? /etc/bashrc
???????? 如果想要別名自己使用,寫入下面兩個文件中
???????? ~ /.bash_profile
???????? ~/.bashrc
???????? PEP代碼標準
?
?
?
?
8.文件通配符
? ? ? ?**文件通配符不是正則表達式**
? 任意單個字符
* 任意長度的任意字符
[] 指定范圍內的任意字符
^ ?1.以什么開頭
? ?2.[^]指定范圍以外的任意一個字符
?[^0-9A-Za-z]? [0-9] [A-Z] [a-zA-Z]
指定字符類:
1.[:alnum]----- [^0-9A-Za-z]字母+數字
2.[:upper:]-----字母大小寫
3.[:digit:]-------數字
4.[:punct:]-----特殊字符
5.[:space:]-----空格?? ^*[[:space:]]*$-----匹配空白行
轉載于:https://www.cnblogs.com/KAJIA1/p/11307887.html
總結
- 上一篇: 进程和线程的一些见解
- 下一篇: Day_04-数组,元组,列表