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