久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

Linux基礎(chǔ)

 華云天池 2022-05-19 發(fā)布于北京

講師_@王曉春

摘要:

  • 編程基礎(chǔ)
  • 腳本基本格式
  • 變量
  • 運(yùn)算
  • 條件測試
  • 條件判斷if
  • 條件判斷case
  • 配置用戶環(huán)境

▼編程基礎(chǔ)

  • 程序
  • 程序編程風(fēng)格:
  • shell程序:提供了編程能力,,解釋執(zhí)行

  • 程序的執(zhí)行方式
    在這里插入圖片描述

  • 編程基本概念

  • 編程邏輯處理方式:
  • shell編程:過程式,、解釋執(zhí)行
    編程語言的基本結(jié)構(gòu):
    各種系統(tǒng)命令的組合
    數(shù)據(jù)存儲(chǔ):變量、數(shù)組
    表達(dá)式:a + b
    語句:if

▼shell腳本基礎(chǔ)

  1. shell腳本通常以shebang起始
#!/bin/bash

只有第一行可以使用shebang

#!/bin/bash
#!/usr/bin/python
#!/usr/bin/perl
  • shell腳本的用途有:
  1. 自動(dòng)化常用命令
  2. 執(zhí)行系統(tǒng)管理和故障排除
  3. 創(chuàng)建簡單的應(yīng)用程序
  4. 處理文本或文件

?創(chuàng)建shell腳本

1. 使用文本編輯器來創(chuàng)建文本文件

  • 第一行必須包括shell聲明序列:#!
    示例:#!/bin/bash
  • 添加注釋:注釋以#開頭

2. 運(yùn)行腳本

  • 給予執(zhí)行權(quán)限,,在命令行上指定腳本的絕對或相對路徑
  • 直接運(yùn)行解釋器,,將腳本作為解釋器程序的參數(shù)運(yùn)行

腳本規(guī)范

  1. 第一行一般為調(diào)用使用的語言
  2. 程序名,避免更改文件名為無法找到正確的文件
  3. 版本號
  4. 更改后的時(shí)間
  5. 作者相關(guān)信息
  6. 該程序的作用,,及注意事項(xiàng)
  7. 最后是各版本的更新簡要說明

?腳本的基本結(jié)構(gòu)

#!SHEBANG
CONFIGURATION_VARIABLES
FUNCTION_DEFINITIONS
MAIN_CODE

shell腳本示例

#!/bin/bash
# ------------------------------------------
# Filename: hello.sh
# Revision: 1.1
# Date: 2017/06/01
# Author: wang
# Email: [email protected]
# Website: www.
# Description: This is the first script
# Copyright: 2017 wang
# License: GPL
# ------------------------------------------
echo “hello world”
  • 腳本調(diào)試

檢測腳本中的語法錯(cuò)誤
bash -n /path/to/some_script
調(diào)試執(zhí)行
bash -x /path/to/some_script

?變量

在這里插入圖片描述

  • 靜態(tài)編譯語言:使用變量前,,先聲明變量類型,之后類型不能改變,,在編譯時(shí)檢查,,如:java,c
  • 動(dòng)態(tài)編譯語言:不用事先聲明,,可隨時(shí)改變類型,,如bash,Python
  • 強(qiáng)類型語言:不同類型數(shù)據(jù)操作,,必須經(jīng)過強(qiáng)制轉(zhuǎn)換才同一類型才能運(yùn)算,,如java , c# ,,python
  • 弱類型語言:語言的運(yùn)行時(shí)會(huì)隱式做數(shù)據(jù)類型轉(zhuǎn)換,。無須指定類型,默認(rèn)均為字符型,;參與運(yùn)算會(huì)自動(dòng)進(jìn)行隱式類型轉(zhuǎn)換,;變量無須事先定義可直接調(diào)用

1. Shell中變量命名法則:

1、不能使程序中的保留字:例如if, for
2、只能使用數(shù)字,、字母及下劃線,,且不能以數(shù)字開頭
3、見名知義
4,、統(tǒng)一命名規(guī)則:駝峰命名法

  • Shell中命名建議規(guī)則:
    1、變量名大寫
    2,、局部變量小寫
    3,、函數(shù)名小寫
    4、用英文名字,,并體現(xiàn)出實(shí)際作用

2. bash中變量的種類

根據(jù)變量的生效范圍等標(biāo)準(zhǔn)劃分下面變量類型

  • 局部變量:生效范圍為當(dāng)前shell進(jìn)程,;對當(dāng)前shell之外的其它shell進(jìn)程,包括當(dāng)前shell的子shell進(jìn)程均無效
  • 環(huán)境變量:生效范圍為當(dāng)前shell進(jìn)程及其子進(jìn)程
  • 本地變量:生效范圍為當(dāng)前shell進(jìn)程中某代碼片斷,,通常指函數(shù)
  • 位置變量:$1, $2, …來表示,,用于讓腳本在腳本代碼中調(diào)用通過命令行傳遞給它的參數(shù)
  • 特殊變量:$?, $0, $*, $@, $#,$$

$BASHPID:當(dāng)前進(jìn)程的PID
$PPID:父進(jìn)程的PID

只讀變量:declare -r VARreadonly VAR

局部變量

在這里插入圖片描述

  • 變量引用:${name} 或者 $name
    ' '弱引用,其中的變量引用會(huì)被替換為變量值
    ' '強(qiáng)引用,,其中的變量引用不會(huì)被替換為變量值,,而保持原字符串
  • 顯示已定義的所有變量:set
  • 刪除變量:unset name

環(huán)境變量

在這里插入圖片描述

bash內(nèi)建的環(huán)境變量
$PATH$_ 上一條命令的最后一條參數(shù)$HISTSIZE
$SHELL$HOSTNAME$MAIL
$USER$LANG$SHLVL bash嵌套深度
$UID$PWD$HOME

位置變量

在這里插入圖片描述

  • set -- 清空所有位置變量

退出狀態(tài)

  • 進(jìn)程使用退出狀態(tài)來報(bào)告成功或失敗
    0 代表成功,1-255代表失敗
    $? 變量保存最近的命令退出狀態(tài)

  • 退出狀態(tài)碼

  • bash自定義退出狀態(tài)碼

  • exit [n]:自定義退出狀態(tài)碼
    注意:腳本中一旦遇到exit命令,,腳本會(huì)立即終止,;終止退出狀態(tài)取決于exit命令后面的數(shù)字
    注意:如果未給腳本指定退出狀態(tài)碼,整個(gè)腳本的退出狀態(tài)碼取決于腳本中執(zhí)行的最后一條命令的狀態(tài)碼

3. 算術(shù)運(yùn)算

在這里插入圖片描述

賦值

在這里插入圖片描述

邏輯運(yùn)算

在這里插入圖片描述

  • 與:11得1,,有0得0
  • 或:00得0,,有1得1

短路運(yùn)算

在這里插入圖片描述

條件測試

在這里插入圖片描述
在這里插入圖片描述

  • 真與假或
  • 命令為真時(shí):直接找&&后的命令
  • 命令為假時(shí):直接找||后的命令
  • 例如:
grep -q no_such_user /etc/passwd || echo 'No such user'
No such user
ping -c1 -W2 station1 &> /dev/null > && echo 'station1 is up' > || (echo 'station1 is unreachable'; exit 1)
station1 is up

4. test命令

  • 長格式的例子:
test '$A' = '$B' && echo 'Strings are equal'
test$A” -eq “$B&& echo 'Integers are equal'
  • 簡寫格式的例子:
[ '$A' = '$B' ] && echo 'Strings are equal'
[ '$A' -eq '$B' ] && echo 'Integers are equal'

bash的數(shù)值測試

-v VAR 變量VAR是否設(shè)置
例:[ -v x ] && echo 1 || echo 0

數(shù)值測試字符串測試
-gt是否大于=是否等于
-ge是否大于等于>ascii碼是否大于ascii碼
-eq是否等于<是否小于
-ne是否不等于!=是否不等于
-lt是否小于=~左側(cè)字符串是否能夠被右側(cè)的PATTERN所匹配
-le是否小于等于注意: 此表達(dá)式一般用于[[ ]]中;擴(kuò)展的正則表達(dá)式
-z 'STRING“字符串是否為空,,空為真,,不空為假
-n 'STRING“字符串是否不空,不空為真,,空為假

注意:用于字符串比較時(shí)的用到的操作數(shù)都應(yīng)該使用引號

bash的文件測試

存在性文件權(quán)限文件大小測試
-a FILE同-e-r FILE是否可讀-t fdfd 文件描述符是否在某終端已經(jīng)打開
-e FILE文件是否存在-w FILE是否可寫-N FILE文件自從上一次被讀取之后是否被修改過
-x FILE是否可執(zhí)行-O FILE當(dāng)前有效用戶是否為文件屬主
類別文件特殊權(quán)限-G FILE當(dāng)前有效用戶是否為文件屬組
-d FILE是否目錄-u FILE是否有SUID權(quán)限FILE1 -ef FILE2FILE1是否是FILE2的硬鏈接
-f FILE是否普通文件-g FILE是否有SGID權(quán)限FILE1 -nt FILE2FILE1是否新于FILE2(mtime)
-h FILE-L FILE是否符號鏈接文件-k FILE是否有STICKY權(quán)限FILE1 -ot FILE2FILE1是否舊于FILE2
-b FILE是否塊設(shè)備文件
-c FILE是否字符文件-s FILE是否存在且非空
-p FILE是否管道文件
-S FILE是否套接字文件

組合測試條件

  1. 第一種方式:
    COMMAND1 && COMMAND2 并且
    COMMAND1 || COMMAND2 或者
    ! COMMAND

如:
[ -f “KaTeX parse error: Expected 'EOF', got '&' at position 9: FILE” ] &?& [[ “FILE”=~ .*.sh$ ]]

  1. 第二種方式:
    EXPRESSION1 -a EXPRESSION2 并且
    EXPRESSION1 -o EXPRESSION2 或者
    ! EXPRESSION
    必須使用測試命令進(jìn)行,,[[ ]] 不支持

示例:
[ -z “$HOSTNAME” -o $HOSTNAME '==“l(fā)ocalhost.localdomain” ]
&& hostname www.
[ -f /bin/cat -a -x /bin/cat ] && cat /etc/fstab

5. 使用read命令來接受輸入

  • 使用read來把輸入值分配給一個(gè)或多個(gè)shell變量

-p 指定要顯示的提示
-s 靜默輸入,一般用于密碼
-n N 指定輸入的字符長度N
-d '字符’ 輸入結(jié)束符
-t N TIMEOUT為N秒

  • read 從標(biāo)準(zhǔn)輸入中讀取值,,給每個(gè)單詞分配一個(gè)變量
  • 所有剩余單詞都被分配給最后一個(gè)變量
    read -p “Enter a filename: “ FILE

6. 條件選擇 if 語句

在這里插入圖片描述

#單分支
if 判斷條件
then
	條件為真的分支代碼
else
	條件為假的分支代碼
fi

#多分支
if 判斷條件1
then
	條件1為真的分支代碼
elif 判斷條件2
then
	條件2為真的分支代碼
elif 判斷條件3
then
	條件3為真的分支代碼
else
	以上條件都為假的分支代碼
fi
  • 逐條件進(jìn)行判斷,,第一次遇為“真”條件時(shí),,執(zhí)行其分支,而后結(jié)束整個(gè)if語句
    If示例
根據(jù)命令的退出狀態(tài)來執(zhí)行命令
if ping -c1 -W2 station1 &> /dev/null; then
echo 'Station1 is UP' elif grep 'station1' ~/maintenance.txt &> /dev/null; then
echo 'Station1 is undergoing maintenance'
else
echo 'Station1 is unexpectedly DOWN!'
exit 1
fi

7. 條件判斷:case語句

在這里插入圖片描述

case 變量引用 in
PAT1)
	分支1
	;;
PAT2)
	分支2
	;;
...
*)
	默認(rèn)分支
	;;
esac
  • case支持glob風(fēng)格的通配符:
    *: 任意長度任意字符
    ?: 任意單個(gè)字符
    [ ]:指定范圍內(nèi)的任意單個(gè)字符
    a|b: a或b

8. bash如何展開命令行

  1. 把命令行分成單個(gè)命令詞
  2. 展開別名
  3. 展開大括號的聲明({})
  4. 展開波浪符聲明(~)
  5. 命令替換$() 和 ``)
  6. 再次把命令行分成命令詞
  7. 展開文件通配(*、?,、[abc]等等)
  8. 準(zhǔn)備I/0重導(dǎo)向(<、>)
  9. 運(yùn)行命令
  • 防止擴(kuò)展
    反斜線(\)會(huì)使隨后的字符按原意解釋
$ echo Your cost: \$5.00
Your cost: $5.00
  • 加引號來防止擴(kuò)展
    ·單引號()防止所有擴(kuò)展
    ·雙引號()也防止所有擴(kuò)展,,但是以下情況例外:
    $(美元符號) - 變量擴(kuò)展
    ` (反引號) - 命令替換
    \(反斜線) - 禁止單個(gè)字符擴(kuò)展
    !(嘆號) - 歷史命令替換

▼bash的配置文件

按生效范圍劃分,,存在兩類:

  • 全局配置:
    /etc/profile
    /etc/profile.d/*.sh
    /etc/bashrc
  • 個(gè)人配置:
    ~/.bash_profile
    ~/.bashrc
  • shell登錄兩種方式

交互式登錄:
(1)直接通過終端輸入賬號密碼登錄
(2)使用“su - UserName” 切換的用戶
執(zhí)行順序:/etc/profile --> /etc/profile.d/*.sh --> ~/.bash_profile --> ~/.bashrc --> /etc/bashrc

非交互式登錄:
(1)su UserName
(2)圖形界面下打開的終端
(3)執(zhí)行腳本
(4)任何其它的bash實(shí)例
執(zhí)行順序: /etc/profile.d/*.sh --> /etc/bashrc -->~/.bashrc

  • Profile類
  1. 按功能劃分,存在兩類:
    profile類和bashrc
  • profile類:為交互式登錄的shell提供配置
    全局:/etc/profile, /etc/profile.d/*.sh
    個(gè)人:~/.bash_profile
    功用:
    (1) 用于定義環(huán)境變量
    (2) 運(yùn)行命令或腳本

  • Bashrc類
    bashrc類:為非交互式和交互式登錄的shell提供配置
    全局:/etc/bashrc
    個(gè)人:~/.bashrc
    功用:
    (1) 定義命令別名和函數(shù)
    (2) 定義本地變量

?編輯配置文件生效

  • 修改profile和bashrc文件后需生效
    兩種方法:
    1重新啟動(dòng)shell進(jìn)程
    2 .或source

例:
. ~/.bashrc

1. Bash 退出任務(wù)

  • 保存在~/.bash_logout文件中(用戶)
  • 在退出登錄shell時(shí)運(yùn)行
  • 用于
    ·創(chuàng)建自動(dòng)備份
    ·清除臨時(shí)文件

2. $- 變量

h:hashall,打開這個(gè)選項(xiàng)后,,Shell 會(huì)將命令所在的路徑hash下來,,避免每次都要查詢。通過set +h將h選項(xiàng)關(guān)閉
i:interactive-comments,,包含這個(gè)選項(xiàng)說明當(dāng)前的 shell 是一個(gè)交互式的 shell,。所謂的交互式shell,在腳本中,i選項(xiàng)是關(guān)閉的,。
m:monitor,,打開監(jiān)控模式,就可以通過Job control來控制進(jìn)程的停止,、繼續(xù),,后臺(tái)或者前臺(tái)執(zhí)行等。
B:braceexpand,,大括號擴(kuò)展
H:history,,H選項(xiàng)打開,可以展開歷史列表中的命令,,可以通過!感嘆號來完成,,例如“!!”返回上最近的一個(gè)歷史命令,“!n”返回第 n 個(gè)歷史命令

set 命令

  • $- 變量
    h:hashall,,打開這個(gè)選項(xiàng)后,,Shell 會(huì)將命令所在的路徑hash下來,避免每次都要查詢,。通過set +h將h選項(xiàng)關(guān)閉
    i:interactive-comments,,包含這個(gè)選項(xiàng)說明當(dāng)前的 shell 是一個(gè)交互式的 shell。所謂的交互式shell,在腳本中,,i選項(xiàng)是關(guān)閉的,。
    m:monitor,打開監(jiān)控模式,,就可以通過Job control來控制進(jìn)程的停止,、繼續(xù),后臺(tái)或者前臺(tái)執(zhí)行等,。
    B:braceexpand,,大括號擴(kuò)展
    H:history,H選項(xiàng)打開,,可以展開歷史列表中的命令,,可以通過!感嘆號來完成,例如“!!”返回上最近的一個(gè)歷史命令,,“!n”返回第 n 個(gè)歷史命令

重要

  • set -u 在擴(kuò)展一個(gè)沒有設(shè)置的變量時(shí),,顯示錯(cuò)誤信息(等同set –o nounset)
  • set -e 如果一個(gè)命令返回一個(gè)非0退出狀態(tài)值(失敗)就退出(等同set –o errexit)

練習(xí)

1,、編寫腳本per.sh,判斷當(dāng)前用戶對指定參數(shù)文件,是否不可讀并且不可寫
2,、編寫腳本excute.sh ,,判斷參數(shù)文件是否為sh后綴的普通文件,如果是,,添加所有人可執(zhí)行權(quán)限,,否則提示用戶非腳本文件
3、編寫腳本nologin.sh和login.sh,,實(shí)現(xiàn)禁止和允許普通用戶登錄系統(tǒng)
4,、編寫腳本/root/bin/argsnum.sh,接受一個(gè)文件路徑作為參數(shù),;如果參數(shù)個(gè)數(shù)小于1,,則提示用戶“至少應(yīng)該給一個(gè)參數(shù)”,,并立即退出,;如果參數(shù)個(gè)數(shù)不小于1,則顯示第一個(gè)參數(shù)所指向的文件中的空白行數(shù)
5,、編寫腳本/root/bin/hostping.sh,,接受一個(gè)主機(jī)的IPv4地址做為參數(shù),測試是否可連通,。如果能ping通,,則提示用戶“該IP地址可訪問”;如果不可ping通,,則提示用戶“該IP地址不可訪問”
6,、編寫腳本/root/bin/checkdisk.sh,檢查磁盤分區(qū)空間和inode使用率,,如果超過80%,,就發(fā)廣播警告空間將滿
Bash的文件測試
7、編寫腳本/root/bin/sumid.sh,,計(jì)算/etc/passwd文件中的第10個(gè)用戶和第20用戶的ID之和
8,、編寫腳本/root/bin/sumspace.sh,傳遞兩個(gè)文件路徑作為參數(shù)給腳本,,計(jì)算這兩個(gè)文件中所有空白行之和
9,、編寫腳本/root/bin/sumfile.sh,統(tǒng)計(jì)/etc, /var, /usr目錄中共有多少個(gè)一級子目錄和文件
10、編寫腳本/root/bin/createuser.sh,,實(shí)現(xiàn)如下功能:使用一個(gè)用戶名做為參數(shù),,如果指定參數(shù)的用戶存在,就顯示其存在,,否則添加之,;顯示添加的用戶的id號等信息
11,、編寫腳本/root/bin/yesorno.sh,提示用戶輸入yes或no,并判斷用戶輸入的是yes還是no,或是其它信息
12,、編寫腳本/root/bin/filetype.sh,判斷用戶輸入文件路徑,,顯示其文件類型(普通,目錄,,鏈接,,其它文件類型)
13、編寫腳本/root/bin/checkint.sh,判斷用戶輸入的參數(shù)是否為正整數(shù)
14,、編寫腳本/root/bin/systeminfo.sh,顯示當(dāng)前主機(jī)系統(tǒng)信息,,包括主機(jī)名,IPv4地址,,操作系統(tǒng)版本,,內(nèi)核版本,CPU型號,,內(nèi)存大小,,硬盤大小
15、編寫腳本/root/bin/backup.sh,,可實(shí)現(xiàn)每日將/etc/目錄備份到/root/etcYYYY-mm-dd中
16,、編寫腳本/root/bin/disk.sh,顯示當(dāng)前硬盤分區(qū)中空間利用率最大的值
17、編寫腳本/root/bin/links.sh,顯示正連接本主機(jī)的每個(gè)遠(yuǎn)程主機(jī)的IPv4地址和連接數(shù),,并按連接數(shù)從大到小排序
18,、讓所有用戶的PATH環(huán)境變量的值多出一個(gè)路徑,例如:/usr/local/apache/bin
19,、用戶root登錄時(shí),,將命令指示符變成紅色,并自動(dòng)啟用如下別名: rm='rm –i’
cdnet='cd /etc/sysconfig/network-scripts/’
editnet='vim /etc/sysconfig/network-scripts/ifcfg-eth0’
editnet='vim /etc/sysconfig/network-scripts/ifcfg-eno16777736 或 ifcfg-ens33 ’ (如果系統(tǒng)是CentOS7)
20,、任意用戶登錄系統(tǒng)時(shí),,顯示紅色字體的警示提醒信息“Hi,dangerous!”
21,、編寫生成腳本基本格式的腳本,,包括作者,聯(lián)系方式,,版本,,時(shí)間,描述等
22,、編寫用戶的環(huán)境初始化腳本reset.sh,,包括別名,登錄提示符,,vim的設(shè)置,,環(huán)境變量等

練習(xí)答案

1,、編寫腳本per.sh,判斷當(dāng)前用戶對指定參數(shù)文件,是否不可讀并且不可寫

#!/bin/bash
if [ -e $1 ]
then
[  ! -r $1 -a   ! -w $1  ] && echo 'The file is not write and not red' || echo 'The file can read or write'

else
 echo 'The file isn't exist'
fi

2,、編寫腳本excute.sh ,,判斷參數(shù)文件是否為sh后綴的普通文件,如果是,,添加所有人可執(zhí)行權(quán)限,,否則提示用戶非腳本文件

#!/bin/bash
[ -f $1 -a $(echo $1 | grep '.*\.sh') ] && chmod 755 $1;echo 'yesyes' || echo ' isn't a script'

3、編寫腳本nologin.sh和login.sh,,實(shí)現(xiàn)禁止和允許普通用戶登錄系統(tǒng)

#!/bin/bash
loginyes=none
nologin=none
[ -f /etc/nologin ] && read -n 1 -p 'Do you want to allow user login[Y/N]:' nologin || read -n 1 -p 'Do you want to forbid user login[Y/N]: ' loginyes

loginyes=$(echo $loginyes | tr 'A-Z' 'a-z')
nologin=$(echo $nologin | tr 'A-Z' 'a-z')
#echo -e 'your choose is $loginyes \n please wait! \n ... \n Done,all of users was forbid to login.'
#echo 'your choose is $nologin \n please wait! \n ... \n Done,all of users was allowed to login.'
if [ $loginyes = 'y' ]
then
        echo -e '\nyou choose yeyesyess'
        touch /etc/nologin
elif [ $loginyes = 'n' ]
then
        echo -e '\nyou choose NO'
fi

if [ $nologin = 'y' ]
then
        echo -e '\n you choose yes'
        rm -f /etc/nologin
elif [ $nologin = 'n' ]
then
        echo -e '\nyou choose No'
fi


4,、編寫腳本/root/bin/argsnum.sh,接受一個(gè)文件路徑作為參數(shù),;如果參數(shù)個(gè)數(shù)小于1,,則提示用戶“至少應(yīng)該給一個(gè)參數(shù)”,并立即退出,;如果參數(shù)個(gè)數(shù)不小于1,,則顯示第一個(gè)參數(shù)所指向的文件中的空白行數(shù)

#!/bin/bash
[ $# -lt 1 ] && echo 'you must give me unless one agrument'&&exit 1  || echo `cat $1| grep ^$|wc -l`

5、編寫腳本/root/bin/hostping.sh,,接受一個(gè)主機(jī)的IPv4地址做為參數(shù),,測試是否可連通,。如果能ping通,,則提示用戶“該IP地址可訪問”;如果不可ping通,,則提示用戶“該IP地址不可訪問”

#!/bin/bash
#ping ip
ping -c 1 $1 > /dev/nul
[ $? -eq 0 ] && echo 'ip can ping' || echo ' ip can't ping'

6,、編寫腳本/root/bin/checkdisk.sh,檢查磁盤分區(qū)空間和inode使用率,,如果超過80%,,就發(fā)廣播警告空間將滿
Bash的文件測試

#!/bin/bash
#test6 disk user%
USES=$(df | egrep -o '[0-9]{1,3}%' | tr -d %| sort -nr|head -1)

USEI=$(df -i | egrep -o '[0-9]{1,3}%' | tr -d %| sort -nr|head -1)
[ $USES -ge 80 ] && wall 'WARNING! the disk for almost'

[ $USEI -ge 80 ] && wall 'WARNING! the inode for almost'

7、編寫腳本/root/bin/sumid.sh,,計(jì)算/etc/passwd文件中的第10個(gè)用戶和第20用戶的ID之和

#!/bin/bash
USER10=$(cat /etc/passwd | head -10 | tail -1|cut -d: -f3)
USER20=$(cat /etc/passwd | head -20 | tail -1|cut -d: -f3)
SUMUSER=$[ $USER10 + $USER20 ]
echo 'ID sum is $SUMUSER'

8,、編寫腳本/root/bin/sumspace.sh,傳遞兩個(gè)文件路徑作為參數(shù)給腳本,,計(jì)算這兩個(gè)文件中所有空白行之和

#!/bin/bash
[ $# -lt 1 ] && echo 'please input unless one argument' && exit

#SUM1=$(cat $1 | grep ^$|wc -l)
#SUM2=$(cat $2 | grep ^$|wc -l)
#SUM=$[ $SUM1 + $SUM2 ]
sum=$( cat $@ | grep '^$' | wc -l )
echo 'the space sum is $sum'

9,、編寫腳本/root/bin/sumfile.sh,統(tǒng)計(jì)/etc, /var, /usr目錄中共有多少個(gè)一級子目錄和文件

#!/bin/bash
ETC=$( ls -dl /etc/* /var/* /usr/*| wc -l)
echo '/etc and /var and /usr have $ETC directories or file'

10、編寫腳本/root/bin/createuser.sh,,實(shí)現(xiàn)如下功能:使用一個(gè)用戶名做為參數(shù),,如果指定參數(shù)的用戶存在,就顯示其存在,,否則添加之,;顯示添加的用戶的id號等信息

#!/bin/bash
#10.createuser
[ $# -lt 1 ] && echo 'plead input unless one argument' && exit 1
useradd $1 &> /dev/nul
USER_EXIT=$?
[ $USER_EXIT  -eq 9 ] && echo 'createuser.sh: user $1 already exists' && exit 9
[ ! $USER_EXIT -eq 0 ] && echo 'createuser.sh: ERROR'

id $1

11,、編寫腳本/root/bin/yesorno.sh,提示用戶輸入yes或no,并判斷用戶輸入的是yes還是no,或是其它信息

#!/bin/bash
read -p 'Please input [Yes/No]:' YESORNO
case $YESORNO in
[Yy][Ee][Ss]|[Yy])
echo 'you choose yesyes'
;;
[Nn][Oo]|[Nn])
echo 'you choose no'
;;
*)
echo 'you choose other'
esac

12,、編寫腳本/root/bin/filetype.sh,判斷用戶輸入文件路徑,,顯示其文件類型(普通,目錄,,鏈接,,其它文件類型)

#!/bin/bash
[ $# -lt 1 ] && echo 'Please input unless one argument!' && exit
for count in `seq 1 $#`
do
CHAR=$(eval ls -dl \$$count | cut -c 1)
CO='\e[1;32m'
LOR='\e[0m'
case $CHAR in
-)
        echo -e 'The file type is \e[1;32mnormal file\e[0m'
        ;;
l)
        echo -e 'The file type is $CO link file $LOR'
        ;;
d)
        echo -e 'The file type is $CO directory $LOR'
        ;;
*)
        echo 'sorry,I still don't know the file type '
esac
done

13、編寫腳本/root/bin/checkint.sh,判斷用戶輸入的參數(shù)是否為正整數(shù)

#!/bin/bash
[ $# -lt 1 ] && echo 'Please intput unless one argument' && exit
[ $# -gt 1 ] && echo 'I just can understand one argument' && exit
[[ $1 =~ ^[0-9]*$ ]] && echo 'your argument is a positive integer' || echo 'your argument isn't a INT'

14,、編寫腳本/root/bin/systeminfo.sh,顯示當(dāng)前主機(jī)系統(tǒng)信息,,包括主機(jī)名,IPv4地址,,操作系統(tǒng)版本,,內(nèi)核版本,CPU型號,,內(nèi)存大小,,硬盤大小

#!/bin/bash
CO='\e[1;31m'
LOR='\e[0m'
echo -e 'The hostname is $CO `hostname` $LOR'
echo -e 'The IP address is $CO `ifconfig ens33| egrep -o '(([1-9]?[0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])[.]){3}([1-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-4])\>'` $LOR'
echo -e 'The kernel release $CO `uname -r` $LOR'
echo -e 'The System version is $CO `cat /proc/version | grep -o '.*64'` $LOR'
echo -e 'The CPU model is $CO `lscpu | grep 'Model name'|cut -d: -f2 |tr -d ' ' ` $LOR'
echo -e 'The memory is $CO `lsmem | grep 'Total online memory'|cut -d: -f2|tr -d ' '` $LOR'
echo -e 'The disk is $CO `lsblk | grep '\<sda\>'|tr -s ' '| cut -d ' ' -f4` $LOR'

15、編寫腳本/root/bin/backup.sh,,可實(shí)現(xiàn)每日將/etc/目錄備份到/root/etcYYYY-mm-dd中

#!/bin/bash
cp -a /etc/ /root/etc`date %F`

16,、編寫腳本/root/bin/disk.sh,顯示當(dāng)前硬盤分區(qū)中空間利用率最大的值

#!/bin/bash
echo -e 'The disk use ratio is `df | grep -o '...%'|tr -d %|sort -nr|head -1`%'

17、編寫腳本/root/bin/links.sh,顯示正連接本主機(jī)的每個(gè)遠(yuǎn)程主機(jī)的IPv4地址和連接數(shù),,并按連接數(shù)從大到小排序

#!/bin/bash
#links.sh
echo  'you host links stat is :'
who | egrep -o '(([1-9]?[0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])[.]){3}([1-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-4])\>'|uniq -c|sort -nr

18,、讓所有用戶的PATH環(huán)境變量的值多出一個(gè)路徑,例如:/usr/local/apache/bin

vim /etc/profile.d/env.sh
export PATH=/usr/local/apache/bin:$PATH
source /etc/profile.d/env.sh

19,、用戶root登錄時(shí),,將命令指示符變成紅色,并自動(dòng)啟用如下別名:

vim /root/.bashrc
...
PS1='\[\e[1;31m\][\u@\h \w]\$\[\e[0m\]'
rm='rm –i’
cdnet='cd /etc/sysconfig/network-scripts/’
editnet='vim /etc/sysconfig/network-scripts/ifcfg-ens33’ 
...

20,、任意用戶登錄系統(tǒng)時(shí),,顯示紅色字體的警示提醒信息“Hi,dangerous!”

#任意用戶登錄系統(tǒng)時(shí),會(huì)按如下讀取配置,,在如下哪個(gè)文件寫都可以 
#/etc/profile --> /etc/profile.d/*.sh --> ~/.bash_profile --> ~/.bashrc --> /etc/bashrc
vim /etc/profile.d/env.sh
echo -e '\033[31m hi,dangerous! \033[0m'

21,、編寫生成腳本基本格式的腳本,包括作者,,聯(lián)系方式,,版本,時(shí)間,,描述等
示例

vim ~/.vimrc
set nu 'show line
set ts=4 'TAB 4 chars
syntax on 'grammar light
set cursorline
'set mouse=a
set ai
autocmd BufNewFile *.sh exec ':call SetTitle()'
func SetTitle()
        if expand('%:e') == 'sh'
        call setline(1,'#!/bin/bash')
        call setline(2,'#')
        call setline(3,'#***********************************************************')
        call setline(4,'#Author:                Jibill Chen')
        call setline(5,'#QQ:                    *********')
        call setline(6,'#Date:                  '.strftime('%Y-%m-%d'))
        call setline(7,'#FileName:             '.expand('%'))
        call setline(8,'#URL:                   http://thson.blog.csdn.net')
        call setline(9,'#Description:          The test script')
        call setline(10,'#**********************************************************')
        call setline(11,'')
        endif
endfunc
autocmd BufNewFile * normal G

22,、編寫用戶的環(huán)境初始化腳本reset.sh,包括別名,,登錄提示符,,vim的設(shè)置,,環(huán)境變量等

vim reset.sh
...
cat >> ~/.bash_profile << EOF
PS1='\[\e[1;8;$[RANDOM%6+41]m\][\u@\h \w]\$\[\e[0m\]'
export REGEX_IP='(([1-9]?[0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])[.]){3}([1-9]?[0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])'
EOF

#config bashrc
cat >> ~/.bashrc << EOF
alias cdnet='cd /etc/sysconfig/network-scripts/'
EOF

#config vimrc
cat >> ~/.vimrc << EOF
set nu 'show line
set ts=4 'TAB 4 chars
syntax on 'grammar light
set cursorline
'set mouse=a
set ai
autocmd BufNewFile *.sh exec ':call SetTitle()'
func SetTitle()
        if expand('%:e') == 'sh'
    call setline(1,'#!/bin/bash')
    call setline(2,'#')
    call setline(3,'#***********************************************************')
    call setline(4,'#Author:                Jibill Chen')
    call setline(5,'#QQ:                    **********')
    call setline(6,'#Date:                  '.strftime('%Y-%m-%d'))
    call setline(7,'#FileName:             '.expand('%'))
    call setline(8,'#URL:                   http://thson.blog.csdn.net')
    call setline(9,'#Description:          The test script')
    call setline(10,'#**********************************************************')
    call setline(11,'')
endif
endfunc
autocmd BufNewFile * normal G
EOF
...

    本站是提供個(gè)人知識管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點(diǎn),。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,,謹(jǐn)防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報(bào),。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多