脚本格式及部分命令
#!/bin/bash
#??????????????????????? 除第一行外加#表示注釋
date "+%F"直接使用日期
1.變量
查看系統(tǒng)聲明變量用export顯示系統(tǒng)上所有導(dǎo)出的環(huán)境變量,顯示聲明過程
printenv也可以查看所有導(dǎo)出系統(tǒng)變量,但是不顯示聲明信息
env表示可以在指定的環(huán)境下運(yùn)行某個(gè)命令
本地變量 只對本程序有效對 子shell無效。使用/bin/bash打開子shell
環(huán)境變量 對當(dāng)前和子shell都有效聲明時(shí)要用export聲明
?打開子shell? /bin/bash表示打開一次
特殊變量 bash內(nèi)置變量,調(diào)用bash編程特殊的執(zhí)行結(jié)果。$?命令的執(zhí)行結(jié)果
echo$?查看上一條命令是否成功執(zhí)行0表示成功,1-255其它數(shù)字表示錯(cuò)誤信息不同數(shù)字?表示不同錯(cuò)誤。
位置變量 如$1 ,$2 ,$3其中$1,$2等可以代表任意數(shù)字,字符串等
算數(shù)運(yùn)算 $[]或 $(())
重要環(huán)境變量
DISPLAY定義系統(tǒng)桌面顯示在哪個(gè)主機(jī)上,第幾個(gè)屏幕顯示
HISTSIZE命令歷史里面可以保存多少條命令*
HOME用于表示當(dāng)前用戶家目錄*
HOSTNAME主機(jī)名稱*
LANG 語言
LOGNAME當(dāng)前用戶登錄名
PATH路徑,外部命令尋址路徑
PWD顯示當(dāng)前位置,不斷變化,實(shí)際上是顯示變量的值
PS1?查看#echo $ps1
有多少種可以用使用man bash搜索p36
改變環(huán)境變量使用export 例如export LANG=c
2.bash的別名
alias 用此聲明的命令的別名,重啟后會失效,只是臨時(shí)有效,并沒有保存在某個(gè)配置文件里面的,自己聲明的變量如果保存在配置文件里面的話也可以長期有效
清屏linux下clear?? windows下cls
例如把linux下的clear命名為cls來使用時(shí)
alias cls=clear
再如想要把一個(gè)路徑從命名把/etc/sysconfig/network-scripts這個(gè)是修改網(wǎng)卡信息的目錄每次修改都要輸入這么長,很麻煩,想使用cdnet代表cd /etc/sysconfig/network-scripts則命令應(yīng)該這么寫,cd后面有空格要用(單雙都可以)引號alias cdnet="cd /etc/sysconfig/network-scripts"來聲明
unalias取消聲明別名
如unalias cdnet
如果想永久有效,需要保持在
使用echo $PATH可以查看配置文件
全局有效表示對所有用戶都有效/etc/profile,/etc/profile.d/*,/etc/bashrc
局部有效:-/.bash_profile, -/.bashrc ,-/.bash_logout(-/表示用戶家目錄.表示隱藏文件)
/etc/profile.d/*下的文件和/etc/profile文件功能相同,不可能把所有命令都放在后者,這樣后者會變的很大,前者可以降低后者體積。
設(shè)置好后放在全局則全局有效,放在局部則局部有效。
如果一個(gè)聲明既全局有效,又局部有效,則優(yōu)先局部,小的精確的優(yōu)先
profile類
?設(shè)置環(huán)境變量
?運(yùn)行用戶登錄要執(zhí)行的一些命令
bashrc類
?設(shè)置別名
?設(shè)置本地變量
shell也分為2類:交互式登錄shell,非交互式登錄shell
交互式shell?? ?以一個(gè)用戶登錄,輸入命令的shell
非交互式shell?只是在執(zhí)行腳本的過程中,系統(tǒng)自動(dòng)執(zhí)行,不需要用戶輸入命令的shell
交互式登錄的shell的次序
首先/etc/profile
調(diào)用/etc/profile.d/*
調(diào)用-/.bash_profile設(shè)置環(huán)境變量和用戶要執(zhí)行的命令
調(diào)用-/.bashrc別名和本地變量
最后/etc/bash
非登錄式shell的次序
(家目錄)-/.bashrc-----/etc/bashrc----/etc/profile.d/*
越往后優(yōu)先級越高
如何選擇保存路徑?
如創(chuàng)建一個(gè)對所有用戶都有效的如cdnet='cd /etc/sysconfig/network-scripts'
首先創(chuàng)建對所有用戶都有效的要放在全局類的文件里面
其次設(shè)置別名要放在bashrc下的文件里面
因此選擇/etc/bashrc目錄下面。
nano /etc/bashrc
alias cdnet='cd /etc/sysconfig/network-scripts'(不必理會上面的,放最后)
此時(shí)推出后可以不用chmod給他執(zhí)行權(quán)限
任何用戶登錄的那一刻才可以使用你設(shè)置的環(huán)境變量,這時(shí)候可以使用
source重讀命令 ,令它立即生效例如source /etc/profile(或者. /etc/profile)重讀這個(gè)文件然后再使用你設(shè)置好的環(huán)境變量就可以讀出了echo $***
第二節(jié)
1.輸入輸出重定向管道
不指定時(shí)輸出到
輸入設(shè)備?/dev/stdin(標(biāo)準(zhǔn)輸入設(shè)備)0表示設(shè)備通道的標(biāo)識符(描述符)? 鍵盤? <
標(biāo)準(zhǔn)輸出? /deb/stdout?? 1?顯示器?? >
錯(cuò)誤輸出? /dev/stderr?? 2?顯示器?2>
0<前面的0
1>前面的1都省略了
& >無論對錯(cuò)都從定向到那里,合并錯(cuò)誤輸出流。
>覆蓋原有內(nèi)容
>>追加輸出從定向,不覆蓋原有內(nèi)容
2>>也可以實(shí)現(xiàn)追加輸出
也可以是用echo來在某個(gè)文件最后一行插入信息。
如echo "this is a test" >>/tmp/***(把此信息重定向到/tmp下不覆蓋)
特別提示
&>>不支持這個(gè)命令,后面的大于號不能識別
set -C(減號no glober)禁止使用覆蓋從定向(避免手誤)
set +C可以使用覆蓋功能(關(guān)閉set -C)
>|表示知道自己在覆蓋,直接覆蓋,這時(shí)候可以不用使用set +C了
-減號表示拒絕某項(xiàng)?
+表示打開某項(xiàng)命令
可以把標(biāo)準(zhǔn)輸入輸出重定向
輸出流,錯(cuò)誤輸出和輸出流不同
管道|
前一個(gè)命令執(zhí)行的結(jié)果傳遞給后一個(gè)命令的輸入內(nèi)容
可以多次使用管道
tee?? T丁字路口
如ls a.txt |tee >b.txt |less a.txt
重定向到b.txt里面,然后分頁顯示a.txt
如何實(shí)現(xiàn)自定義輸入輸出從定向
定義一個(gè)描述符供我們使用如
exec? 3> /tmp/myout.out(此時(shí)表示覆蓋)
ls /var >&3(重定向到myout.out文件)
cat /tmp/myout.out
自定義文件描述符并重定向,避免反復(fù)打開一個(gè)文件
用完后撤銷命令
exec 3>&-
&>=2>&1無論對錯(cuò)都輸出到那里
/dev/null送入的數(shù)據(jù)全部會被丟棄
程序的執(zhí)行流
順序執(zhí)行
選擇分支
循環(huán)執(zhí)行
for I in list ;do
?statement1
?statement2
done
1 2 3 4 5 6 7 8 9 10='seq 1 10'={1..10}
ping -c 1 192.168.0.1? ping1次192.168.0.1
如何清理windows的緩存?
arp -d
export導(dǎo)出變量
如export LANG=c
declare 聲明一個(gè)變量
env表示可以在一個(gè)指定的命令下使用命令
>&中間不能有空格
文本處理類命令
cut文本內(nèi)容切割
-d指定分隔符-d:表示這一段中以:為分割符
-f指定第幾段5-7取第5-7段
cut可以把某段取出賦值給某程序
“”使用cut時(shí)表示空格
如cut -d: -f1 /etc/passwd
IFS=$'\n'?? 內(nèi)建字段分割符,只識別換行符號(表示只把換行符為分隔符)
通常情況下? 空格、tab字符、和換行符都被認(rèn)為是列表分隔符
grep?全面尋找正則表達(dá)式并顯示出來
-i(ignore)
-v表述的不同的行
-n找到所匹配的行在文中的所處的行號
-An
-Bn(before)
-Cn
--color把匹配的字符串高亮顯示
有 grep? ,egrep,fgrep
grep [o] pattern file ..
pattern 模式
正則表達(dá)式:由一堆元字符組成的,為了實(shí)現(xiàn)通配用的(簡稱re)
正則表達(dá)式分為,基本正則表達(dá)式,擴(kuò)展表達(dá)式
^脫字符,行首定位符
\{\}
.*任意長度的任意字符
x\{m\}
例如? grep --color "\(root\).*\1able" /grep.txt
在grep.txt這個(gè)文件里面查找包含了root,并且中間包含了任意長度的任意字符并且后面跟了個(gè)rootblie的字符串
grep -E=egrep支持?jǐn)U展的正則表達(dá)式
+=\{1,}\
?=\{0,1}\
$?:上一個(gè)命令的執(zhí)行結(jié)果
1-255:failure錯(cuò)誤
短路操作符號
a&&b只有a正確才執(zhí)行b
a||b只有a不正確才執(zhí)行b
&&? 1&&0=0 且運(yùn)算(如果前一個(gè)正確執(zhí)行了,后面的一個(gè)才執(zhí)行)
||或,一個(gè)|表示管道(如果前面一個(gè)執(zhí)行不了,則后面的才執(zhí)行)
#!/bin/bash
ping c1其中c1這個(gè)參數(shù)表示ping的次數(shù)
轉(zhuǎn)載于:https://blog.51cto.com/abliq/620127
總結(jié)
- 上一篇: ie,火狐下滚动条的问题
- 下一篇: 通过GetProcAddress函数动态