linux字符雨,linux周记
shell腳本基礎
格式要求:首行shebaang機制
#!/bin/bash
#!/usr/bin/python
#!/usr/bin/perl
shell腳本用途:
自動化常用命令
執(zhí)行系統(tǒng)管理和故障排除
創(chuàng)建簡單的應用程序
處理文本或文件
bash中變量的種類
局部變量:生效范圍為當前shell進程;對當前shell之外的其他shell進程,包括當前shell的子shell進程均無效
環(huán)境變量:生效范圍為當前shell進程及其子進程
本地變量:生效范圍為當前shell進程中某代碼片段,通常指函數(shù)
位置變量:$1,$2,$3,...來表示,用于讓腳本在腳本代碼中調用通過命令行傳遞給它的參數(shù)
特殊變量:$?,$0,$,$@,$#,$$,$!
變量賦值:? name=root ??變量疊加name="$name"hello
變量引用:? $name 或者 ${name}
弱引用:?? " " 其中的變量引用會被替換為變量值
強引用:?? ' ' 其中的變量引用不會被替換為變量值,而保持原字符串
set:????顯示已定義的所有變量
unset name:?刪除變量
例:編寫腳本顯示當前主機信息
#!/bin/bash
aa=$[RANDOM%7+31]
bb="\e[1;${aa}m"
cc="\e[0m"
ipv4=$(ifconfig|sed -n '2p'|sed -r "s/.inet //"|sed -r "s/ .//")
echo "當前主機系統(tǒng)信息如下:"
echo -e 主機名: $bb$(hostname)$cc
echo -e ipv4地址:$bb$ipv4$cc
echo -e 操作系統(tǒng)版本: $bb$(cat /etc/redhat-release|cut -d. -f1-2)$cc
echo -e 內核版本 $bb$(uname -r)$cc
echo -e CPU型號:$bb$(lscpu |grep "Model name"|tail -n1|tr -s " "|cut -d ":" -f2)$cc
echo -e 內存大小:$bb$(free -mh|head -n2|tail -n1|tr -s " "|cut -d " " -f2)$cc
echo -e 硬盤容量:$bb$(fdisk -l|head -n2|tail -n1|cut -d, -f1|cut -d " " -f2-4)$cc
環(huán)境變量的聲明、賦值:
export name=VALUE
顯示所有環(huán)境變量:
env、printenv、export、declare -x
刪除變量:
unset name
BASH內建的環(huán)境變量:
PATH、SHELL、USER、UID、HOME、PWD、SHLVL、LANG、MAIL、HOSTNAME、HISTSIZE、_下劃線
只讀變量:只能聲明,但不能修改和刪除
聲明只讀變量:
readonly name 、declare -r name
查看只讀變量:
readonly -p
$1,$2,$3,..對應第1、第2、第3的參數(shù)
$0,???代表命令本身
$,???傳遞給腳本的所有參數(shù),全部參數(shù)合為一個字符串
$@,??傳遞給腳本的所有參數(shù),每個參數(shù)為獨立字符串
$#,? ? 傳遞給腳本的參數(shù)的個數(shù)
set -- ??清空所有位置變量
$? ??? 進程使用退出狀態(tài)來報告成功或失敗,0代表成功,1-255代表失敗
bash有內建的隨機數(shù)生成器變量:$RANDOM(0-32767)
例:計算/etc/passwd文件中第10和第20個用戶的uid之和
##!/bin/bash
id1=$(cat /etc/passwd|head -n10|tail -n1|cut -d: -f3)
id2=$(cat /etc/passwd|head -n20|tail -n1|cut -d: -f3)
sum=$(($id1+$id2))
echo $sum
邏輯運算
true 1 , false 0
與:
1 與 1 = 1
1 與 0 = 0
0 與 1 = 0
0 與 0 = 0
或
1 或 1 = 1
1 或 0 = 1
0 或 1 = 1
0 或 0 = 0
非
!
測試命令: test EXPRESSION、[ EXPRESSION ] 、[[ EXPRESSION ]]
bash的數(shù)值測試
-v VAR 變量VAR是否設置
-gt 是否大于
-ge 是否大于等于
-eq 是否等于
-ne 是否不等于
-lt 是否小于
-le 是否小于等于
bash的字符串測試
= 是否等于
> ascii碼是否大于ascii碼
< 是否小于
!= 是否不等于
=~ 左側字符串是否能夠被右側的PATTERN,此表達式一般用于[[]]中;擴展的正則表達式。
-z 字符串是否為空,空為真
-n 字符串是否不為空,不空為真 (用于字符串比較時用到的操作都應該使用引號)
bash的文件測試
-e 判斷文件是否存在,存在為真
-b 判斷是否為塊設備文件
-c 判斷是否為字符設備文件
-d 判斷是否為目錄文件
-f 判斷是否為普通文件
-L或-h判斷是否為符號連接文件
-p 判斷是否為管道文件
-S 判斷是否為套接字文件
bash的文件權限測試
-r 判斷是否可讀
-w 判斷是否可寫
-x 判斷是否可執(zhí)行
-u 判斷是否擁有suid權限
-g 判斷是否擁有sgid權限
-k 判斷是否擁有sticky權限
bash的文件屬性測試
-s 是否存在并且非空
-t 文件描述符是否在某終端已經(jīng)打開
-N 文件自從上一次被讀取之后是否被修改過
-O 當前有效用戶是否為文件屬主
-G 當前有效用戶是否為文件屬組
file1 -ef file2 ??file1是否是file2的硬鏈接
file1 -nt file2 ??file1是否比file2新
file1 -ot file2 ??file1是否比file2舊
bash的組合測試條件
EXPRESSION1 -a EXPRESSION2 ?并且
EXPRESSION1 -o EXPRESSION2 ?或者
COMMAND1 && COMMAND2 ?并且,短路與
COMMAND1 || COMMAND2 ?或者,短路或
!COMMAND 非
如 :[ -f "$FILE" ]&&[[ "$FILE" =~ .*.sh$ ]]
read輸入命令
-p 指定要顯示的提示
-s 靜默輸入,一般用于密碼
-n 指定輸入的字符長度
-d ‘字符’ 輸入結束符
-t 等待輸入的時間
echo abc | { read x y z;echo $x$y$z;} ?使用管道 read會開啟子shell
條件選擇if語句
單分支
if 判斷條件;then
條件為真的分支代碼
fi
例:
#!/bin/bash
sda5=$(df -h|grep /dev/sda5|awk '{print$5}'|tr -d "%")
if [ $sda5 -ge 80 ]
then
echo "warning! /dev/sda5 is full"
fi
雙分支
if 判斷條件;then
條件為真的分支代碼
else
條件為假的分支代碼
fi
例:
#!/bin/bash
date=$(date "+%y%m%d")
size=$(du -sh /etc)
if [ -d /tmp/back ]
then
echo "date:$date">/tmp/back/info.log
echo "size:$size">>/tmp/back/info.log
cd /tmp/back
tar -zcvf etc-$date.tar.bz2 /etc info.log &>/dev/null
rm -rf /tmp/back/info.log
else
mkdir /tmp/back
echo "date:$date">/tmp/back/info.log
echo "size:$size">>/tmp/back/info.log
cd /tmp/back
tar -zcvf etc-$date.tar.bz2 /etc info.log &>/dev/null
rm -rf /tmp/back/info.log
fi
多分支
if 判斷條件1;then
條件為真的分支代碼
elif 判斷條件2;then
條件2為真的分支代碼
elif 判斷條件3;then
條件3為真的分支代碼
else
以上條件都為假的分支代碼
fi
條件判斷;case語句
case $變量 in
"選項1")
命令1
;;
"選項2")
命令2
;;
*)
命令3
;;
esac
bash的配置文件
全局配置:
/etc/profile
/etc/profile.d/.sh
/etc/bashrc
個人配置:
~/.bash_profile
~/.bashrc
shell 登錄兩種方式
交互式登錄:
執(zhí)行順序:/etc/profile --> /etc/profile.d/.sh --> ~/.bash_profile --> ~/.bashrc --> /etc/bashrc
非交互式登錄:
執(zhí)行順序:/etc/profile.d/*.sh --> /etc/bashrc --> ~/.bashrc
profile類:為交互式登錄的shell提供配置
bashrc類:為非交互式和交互式登錄的shell提供配置
local命令
-i 不區(qū)分大小寫的搜索
-n N 只列舉前N個匹配項目
-r 使用基本正則表達式
find 路徑 條件 動作
-maxdepth 最大搜索深度
-mindepth 最小搜索深度
-depth 先處理目錄里文件,再處理目錄
-regex 正則表達式
-path 不搜索目錄里文件
-perm 600 精準權限查找
-perm -444 u g o 三者都有讀權限
-perm + centos7改為/
-perm /222 u g o 三者有一個有寫權限就可以
-ok-exec {} \; 對查找的結果進行處理
-empty 空
參數(shù)替換 xargs
echo {1..100}|xargs -n1
echo user{1..10}|xargs -n1 useradd
壓縮、解壓縮
compress
-d 解壓縮
-c 結果輸出至標準輸出,不刪除源文件
-v 顯示詳情
zcat file.z? zcat file.gz ?bzcat file.bz2 ?xzcat file.xz ?不顯示解壓縮的前提下查看文本文件內容
cat m | gzip > m.gz
lscpu | gzip > cpu.gz
bzip2 -k 保留原文件
tar -zcvf ??.tar.gz
tar -jcvf ??.tar.bz2
tar -Jcvf ??.tar.xz
split 分割一個文件為多個文件
rpm2cpio 包路徑 | cpio -idv ./路徑
-t預覽
ldd 查看依賴的庫
文本處理工具sed
選項:
-n 不輸出模式空間內容到屏幕,即不自動打印
-e 多點編輯
-r 支持使用擴展正則表達式
-i 原文編輯
-i.bak 備份文件并原處編輯
編輯命令:
d 刪除模式空間匹配的行,并立即啟用下一輪循環(huán)
p 打印當前模式空間內容,追加到默認輸出之后
a\ 在指定行后面追加文本,
i\ 在前面插入文本
c\ 替換行為單行或多行文本
w 保存至指定文件
s/// 替換查找 ?g 行內全局替換 ?p顯示替換成功的行 ? w將替換成功的行保存至文件中
rpm包管理
rpm -ivh 安裝并顯示詳細信息
rpm -qa 顯示所有包
rpm -qf 查詢指定文件在哪個包里
rpm -ql 查詢安裝位置
rpm -qR 查詢依賴
rpm -e 卸載
rpm -V 包校驗
yum 管理rpm包
yum源支持文件服務器 http、https、ftp、file
yum配置文件 /etc/yum.repos.d/.repo
yum -y install 包名 ?安裝軟件
yum search 包名 ? 查詢軟件
yum -y reinstall 重新安裝
yum repolist 顯示倉庫列表
yum remove 卸載程序包
yum update 升級程序包
yum info 查看程序包
yum clean all 清除緩存
ym history 查看安裝歷史
yum history info
yum history undo 撤銷
yum history redo 重裝
createrrepo 生成repodate
curl IP 查看網(wǎng)頁內容
yum groupinstall......
dnf 新一代rpm軟件包管理器
安裝所需軟件包
dnf-conf-0.6.4-2.sdl7.noarch.rpm
dnf-0.6.4-2.sdl7.noarch.rpm
python-dnf-0.6.4-2.sdl7.noarch.rpm
配置文件:/etc/dnf/dnf.conf
倉庫文件:/etc/yum.repos.d/.repo
日志:/var/log/dnf.rpm.log
編譯安裝
C語言源代碼編譯安裝三步驟:
1、./configure
2、make 根據(jù)Makefile文件,構建應用程序
3、make install 復制文件到相應路徑
開發(fā)工具:
autoconf: 生成configure腳本
automake:生成Makefile.in
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎總結
以上是生活随笔為你收集整理的linux字符雨,linux周记的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 建行金卡储蓄卡会被降为普通卡吗?
- 下一篇: linux的ctrl alt f6的作用