Linux就該這麼學04學習筆記

来源:https://www.cnblogs.com/oldwangcy/archive/2019/08/18/11373980.html
-Advertisement-
Play Games

今天開始學習,開始做筆記,希望自己能堅持下去 參考鏈接:https://www.linuxprobe.com/chapter-04.html vim編輯器 Linux系統中通用的文本編輯器 vi的升級版本:著色 三種模式 命令模式:控制游標移動,文本複製、粘貼、刪除等操作 輸入模式:輸入文本信息 末 ...


今天開始學習,開始做筆記,希望自己能堅持下去

參考鏈接:https://www.linuxprobe.com/chapter-04.html

vim編輯器

Linux系統中通用的文本編輯器

vi的升級版本:著色

三種模式

命令模式:控制游標移動,文本複製、粘貼、刪除等操作

輸入模式:輸入文本信息

末行模式:保存或退出文檔,以及設置編輯環境

 

模式切換

 

i

在游標前插入

I

定位到行首插入

o(小寫)

在游標所在行下一行插入

O(大寫)

在游標所在行上一行插入

a

在游標後插入

A

在行尾插入

 

常用命令

命令模式

移動

h/←

向左移動

l/→

向右移動

j/↑

向下移動

k/↑

向上移動

5j

向下移動5行

0/^

移動到行首

$

移動到行尾

gg

定位到首行

G

定位到尾行

50G

定位到50行

 

刪除

x(小寫)

向後刪除一個字元

X(大寫)

向前刪除一個字元

dd

刪除(剪切)游標所在整行

5dd

刪除(剪切)從游標處開始的5行

 

複製

yy

複製游標所在整行

nyy

複製游標所在n行

 

粘貼

p 將之前刪除(dd)或複製(yy)過的數據粘貼到游標後面

 

翻頁

Ctrl+b/pageup

向前翻頁

Ctrl+f/pagedown

向後翻頁

 

撤銷

u

撤銷上一步操作

 

查詢

n 顯示搜索命令定位到的下一個字元串

N

顯示搜索命令定位到的上一個字元串

 

末行模式

 

命令 作用
:w 保存
:q 退出
:q! 強制退出(放棄對文檔的修改內容)
:wq! 強制保存退出
:set nu 顯示行號
:set nonu 不顯示行號
:命令 執行該命令
:整數 跳轉到該行
:s/one/two 將當前游標所在行的第一個one替換成two
:s/one/two/g 將當前游標所在行的所有one替換成two
:%s/one/two/g 將全文中的所有one替換成two
?字元串 從游標處向前搜索該字元串
/字元串 從游標處向後搜索該字元串

 

vim實驗

1.vim practice.txt

2.配置主機名稱

3.配置網卡信息

4.配置yum倉庫

 

2.shell腳本

簡單腳本

[root@localhost ~]# cat example.sh 
#!/bin/bash  #告訴系統使用哪種shell解釋器執行該腳本
pwd
ls -al

 

[root@linuxprobe ~]# bash example.sh
/root/Desktop
total 8
drwxr-xr-x. 2 root root 23 Jul 23 17:31 .
dr-xr-x---. 14 root root 4096 Jul 23 17:31 ..
-rwxr--r--. 1 root root 55 Jul 23 17:31 example.sh

 

接受用戶參數

 

$0

當前shell腳本的名稱

$#

總共有多少個參數

$*

所有位置的參數值

$?

顯示上一次命令的執行返回值

$n

第n個參數

 

[root@linuxprobe ~]# vim example.sh
#!/bin/bash
echo "當前腳本名稱為$0"
echo "總共有$#個參數,分別是$*。"
echo "第1個參數為$1,第5個為$5。"
[root@linuxprobe ~]# sh example.sh one two three four five six
當前腳本名稱為example.sh
總共有6個參數,分別是one two three four five six。
第1個參數為one,第5個為five。

 

判斷用戶的參數

文件測試語句

返回值為0則為真,1則為假

-d 測試文件是否為目錄類型
-e 測試文件是否存在
-f 判斷是否為一般文件
-r 測試當前用戶是否有許可權讀取
-w 測試當前用戶是否有許可權寫入
-x 測試當前用戶是否有許可權執行

 

 

[root@linuxprobe ~]# [ -d /etc/fstab ]
[root@linuxprobe ~]# echo $?
1

 

邏輯測試語句

&&:當前面的命令執行成功後才會執行後面的命令

||:當前面的命令執行失敗後才會執行後面的命令

!:把條件測試中的判斷結果取反

 

[root@linuxprobe ~]# [ $USER != root ] && echo "user" || echo "root"
root

先判斷當前登錄用戶的USER變數名稱是否等於root,然後用邏輯運算符“非”進行取反操作,效果就變成了判斷當前登錄的用戶是否為非管理員用戶了。最後若條件成立則會根據邏輯“與”運算符輸出user字樣;或條件不滿足則會通過邏輯“或”運算符輸出root字樣,而如果前面的&&不成立才會執行後面的||符號。

整數值比較語句

-eq 是否等於
-ne 是否不等於
-gt 是否大於
-lt 是否小於
-le 是否等於或小於
-ge 是否大於或等於

 

字元串比較語句

= 比較字元串內容是否相同
!= 比較字元串內容是否不同
-z 判斷字元串內容是否為空

 

流程式控制制語句

if條件測試語句

 

[root@linuxprobe ~]# vim mkcdrom.sh
#!/bin/bash
DIR="/media/cdrom"
if [ ! -e $DIR ]
then
mkdir -p $DIR
fi

判斷/media/cdrom文件是否存在,若存在就結束條件判斷和整個Shell腳本,反之則去創建這個目錄

 

 

[root@linuxprobe ~]# vim chkhost.sh
#!/bin/bash
ping -c 3 -i 0.2 -W 3 $1 &> /dev/null   #若執行成功則返回0
if [ $? -eq 0 ]
then
echo "Host $1 is On-line."
else
echo "Host $1 is Off-line."
fi

使用雙分支的if條件語句來驗證某台主機是否線上,然後根據返回值的結果,要麼顯示主機線上信息,要麼顯示主機不線上信息。這裡的腳本主要使用ping命令來測試與對方主機的網路聯通性,而Linux系統中的ping命令不像Windows一樣嘗試4次就結束,因此為了避免用戶等待時間過長,需要通過-c參數來規定嘗試的次數,並使用-i參數定義每個數據包的發送間隔,以及使用-W參數定義等待超時時間。

 

[root@linuxprobe ~]# vim chkscore.sh
#!/bin/bash
read -p "Enter your score(0-100):" GRADE
if [ $GRADE -ge 85 ] && [ $GRADE -le 100 ] ; then
echo "$GRADE is Excellent"
elif [ $GRADE -ge 70 ] && [ $GRADE -le 84 ] ; then
echo "$GRADE is Pass"
else
echo "$GRADE is Fail" 
fi
[root@linuxprobe ~]# bash chkscore.sh
Enter your score(0-100):88
88 is Excellent
[root@linuxprobe ~]# bash chkscore.sh 
Enter your score(0-100):80
80 is Pass

使用多分支的if條件語句來判斷用戶輸入的分數在哪個成績區間內,然後輸出如Excellent、Pass、Fail等提示信息。在Linux系統中,read是用來讀取用戶輸入信息的命令,能夠把接收到的用戶輸入信息賦值給後面的指定變數,-p參數用於向用戶顯示一定的提示信息。在下麵的腳本示例中,只有當用戶輸入的分數大於等於85分且小於等於100分,才輸出Excellent字樣;若分數不滿足該條件(即匹配不成功),則繼續判斷分數是否大於等於70分且小於等於84分,如果是,則輸出Pass字樣;若兩次都落空(即兩次的匹配操作都失敗了),則輸出Fail字樣

for條件迴圈語句

 

[root@linuxprobe ~]# vim Example.sh
#!/bin/bash
read -p "Enter The Users Password : " PASSWD
for UNAME in `cat users.txt`
do
id $UNAME &> /dev/null
if [ $? -eq 0 ]
then
echo "Already exists"
else
useradd $UNAME &> /dev/null
echo "$PASSWD" | passwd --stdin $UNAME &> /dev/null
if [ $? -eq 0 ]
then
echo "$UNAME , Create success"
else
echo "$UNAME , Create failure"
fi
fi
done

編寫Shell腳本Example.sh。在腳本中使用read命令讀取用戶輸入的密碼值,然後賦值給PASSWD變數,並通過-p參數向用戶顯示一段提示信息,告訴用戶正在輸入的內容即將作為賬戶密碼。在執行該腳本後,會自動使用從列表文件users.txt中獲取到所有的用戶名稱,然後逐一使用“id 用戶名”命令查看用戶的信息,並使用$?判斷這條命令是否執行成功,也就是判斷該用戶是否已經存在。

需要多說一句,/dev/null是一個被稱作Linux黑洞的文件,把輸出信息重定向到這個文件等同於刪除數據(類似於沒有回收功能的垃圾箱),可以讓用戶的屏幕視窗保持簡潔

while條件迴圈語句

 

[root@linuxprobe ~]# vim Guess.sh
#!/bin/bash
PRICE=$(expr $RANDOM % 1000)
TIMES=0
echo "商品實際價格為0-999之間,猜猜看是多少?"
while true
do
read -p "請輸入您猜測的價格數目:" INT
let TIMES++
if [ $INT -eq $PRICE ] ; then
echo "恭喜您答對了,實際價格是 $PRICE"
echo "您總共猜測了 $TIMES 次"
exit 0
elif [ $INT -gt $PRICE ] ; then
echo "太高了!"
else
echo "太低了!"
fi
done

使用多分支的if條件測試語句與while條件迴圈語句,編寫一個用來猜測數值大小的腳本Guess.sh。該腳本使用$RANDOM變數來調取出一個隨機的數值(範圍為0~32767),將這個隨機數對1000進行取餘操作,並使用expr命令取得其結果,再用這個數值與用戶通過read命令輸入的數值進行比較判斷。這個判斷語句分為三種情況,分別是判斷用戶輸入的數值是等於、大於還是小於使用expr命令取得的數值。當前,現在這些內容不是重點,我們當前要關註的是while條件迴圈語句中的條件測試始終為true,因此判斷語句會無限執行下去,直到用戶輸入的數值等於expr命令取得的數值後,這兩者相等之後才運行exit 0命令,終止腳本的執行。

 

case條件測試語句

 

[root@linuxprobe ~]# vim Checkkeys.sh
#!/bin/bash
read -p "請輸入一個字元,並按Enter鍵確認:" KEY
case "$KEY" in
[a-z]|[A-Z])
echo "您輸入的是 字母。"
;;
[0-9])
echo "您輸入的是 數字。"
;;
*)
echo "您輸入的是 空格、功能鍵或其他控制字元。"
esac
[root@linuxprobe ~]# bash Checkkeys.sh
請輸入一個字元,並按Enter鍵確認:6
您輸入的是 數字。
[root@linuxprobe ~]# bash Checkkeys.sh
請輸入一個字元,並按Enter鍵確認:p
您輸入的是 字母。
[root@linuxprobe ~]# bash Checkkeys.sh
請輸入一個字元,並按Enter鍵確認:^[[15~
您輸入的是 空格、功能鍵或其他控制字元。

 

計劃任務服務程式

 

[root@linuxprobe ~]# at 23:30
at > systemctl restart httpd
at >    #此處請同時按下Ctrl+d來結束編寫計劃任務
job 3 at Mon Apr 27 23:30:00 2015
[root@linuxprobe ~]# at -l
3 Mon Apr 27 23:30:00 2016 a root

一次性計劃任務只執行一次,一般用於滿足臨時的工作需求。我們可以用at命令實現這種功能,只需要寫成“at 時間”的形式就可以。如果想要查看已設置好但還未執行的一次性計劃任務,可以使用“at -l”命令;要想將其刪除,可以用“atrm 任務序號”。在使用at命令來設置一次性計劃任務時,預設採用的是互動式方法。例如,使用上述命令將系統設置為在今晚23:30分自動重啟網站服務。

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 前提 入行已經7,8年了,一直想做一套漂亮點的自定義控制項,於是就有了本系列文章。 開源地址:https://gitee.com/kwwwvagaa/net_winform_custom_control 如果覺得寫的還行,請點個 star 支持一下吧 歡迎前來交流探討: 企鵝群568015492 目錄 ...
  • 上次使用別人打包好的docker鏡像,往裡邊加入文件,最終asp.net的docker容器化運行。 這次決定直接全新打包一個jexus+asp.net網站的docker包。 進入root目錄,併在root目錄下建立一個名稱為docker的目錄作為我們這次打包項目的基礎目錄。 首先準備.Net運行環境 ...
  • 如何選gcc包,避免安裝不需要的包 Cygwin讀音:/ˈsɪɡwɪn/ 參考:http://blog.sina.com.cn/s/blog_143cf62360102wrgd.html。 gcc官網沒有提供windows平臺的二進位文件,只提供源碼,官方推薦windows下要用Gcc需使用cygw ...
  • 1、移除舊版本: yum remove docker \ docker-client \ docker-client-latest \ docker-common \ ... ...
  • 首先是LRU的定義,LRU表示最近最少使用,如果數據最近被訪問過,那麼將來被訪問的幾率也更高。 所以邏輯應該是每次都要將新被訪問的頁放到列表頭部,如果超過了list長度限制,就將列表尾部的元素踢出去。 主要結構,STL中的雙向鏈表結構list。 主要操作有get,表示訪問key對應的value,此時 ...
  • 關機:halt/poweroff :立刻關機reboot :立刻重啟 shutdown -r now :立刻重啟shutdown -h 00:00 :定時重啟 now:立刻shutdown -h +num :num分鐘後重啟shutdown -c :取消命令sync :系統文件同步,關機將記憶體問價存 ...
  • Installation of the latest version of netease-cloud-music on Fedora 30 linux platform Abtract As we know, netease company pushed debian-based version ...
  • 題目如下: 求最後的輸出結果: 這道題當時沒分清楚,太菜了,結果應該這樣推出來, 首先弄清楚fork()返回值,在父進程中是一個非0數,子進程中則是0, 所以pid1可以分為兩類值非0和0, (1)pid1非0,pid2同理有兩種取值,0或者非0, (2)pid1為0,表示是子進程,則pid2同樣是 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...