SHEEL DAY1html
[root@room4pc09 桌面]# cat /etc/shells
/bin/sh
/bin/bash
/sbin/nologin
/usr/bin/sh
/usr/bin/bash
/usr/sbin/nologin
/bin/tcsh
/bin/cshlinux
清空已記錄的歷史命令。
[root@svr5 ~]# history -c //清空本身的歷史命令
[root@svr5 ~]# > ~/.bash_history //清空記錄文件
[root@svr5 ~]# history //再次檢查歷史命令列表
42 > ~/.bash_history
43 historyshell
清屏幕:或clearvim
bash執行腳本中的文件bash
必定要清楚本身寫的腳本是交互仍是非交互的!!
交互 須要本身確認app
Ctrl+A 跳到命令行開頭
Ctrl+E 跳到命令行結尾ssh
Ctrl+z 不能在Linux中用ide
!+(最近用過的文件的關鍵詞或history中的編號)
eg: !vim
!catoop
history -c(clear) 清空歷史 默認1000條
vim /etc/profile
HISTSIZE=(50-100條就夠用了)測試
別名(要有意義一些,不然很差識別)
直接在命令行輸入alias 你好=‘ls’
命令+選項 ===alias
輸出 重定向
正確1 默認屏幕
錯誤2 默認屏幕
ls > a.log 有正確的東西,a.log裏面纔會有內容
ls &>
firefox &
for(循環) i in {.....}
/dev/null 垃圾站
是覆蓋 >>追加
scp
clone-vm7 (可安裝1-10個虛擬機)
init5 字符界面變成圖形界面
寫腳本步驟:
bash test.sh
1.新建文件,擴展名最好是sh
2.寫內容
一行必須是#!/bin/bash
下面的全部 指令都在/bin/bash下——定解釋器
#都不會被執行,是註釋信息
3.執行腳本
1)有權限的 rwx
eg : ./test.sh ./只顯示當前目錄下的文檔
chomod +x test.sh 添加執行權限
PATH=路徑 ls在PATH裏面找路徑
ln -s /root/test.sh /bin/abc
--symbolic符號 make symbolic links instead of hard linksq
2)無權限的
bash 文件名 會開啓子進程(子進程執行) 執行完,自動退出
source 文件名 不會開啓子進程 (當前執行)
eg:同時開啓兩個窗口
寫腳本,sleep 100
(1)bash test.sh 或 source test.sh
另外一個窗口執行:pstree
(2)bash text.sh 腳本寫exit
sshd--bash--bash--exit
source test.sh
sshd--bash--exit
echo $a
)Shell腳本的執行方式:
方法一,做爲「命令字」:指定腳本文件的路徑,前提是有 x 權限
[root@svr5 ~]# ./first.sh //指定相對路徑 [root@svr5 ~]# /root/first.sh //指定絕對路徑
方法二,做爲「參數」:使用bash、sh、source或者點號 . 來加載腳本文件
[root@svr5 ~]# bash first.sh //開啓子進程 [root@svr5 ~]# sh first.sh //開啓子進程 [root@svr5 ~]# source first.sh //不開啓子進程 [root@svr5 ~]# . first.sh //不開啓子進程
ps與pstree(進程樹)
查詢文件在哪 eg:which+bash
ftp://192.168.4.254
練習(在虛擬機上配置)
本身搭建yum源,file,ftp,http
mount -o loop 光盤.iso /var/ftp/pub
1)#!/bin/bash
rm -rf /etc/yum.repo.d/*
echo "[abc]
name=added from: http://192. 168.4.254/rh7dvd
baseurl=http://192.168.4.254/rh7dvd
enabled=1
gpgcheck=0" > /etc/yum.repo.d/abc.repo
yum clean all
yum repolist
2)#!/bin/bash
rm -rf /etc/etc/yum.repo.d/*
yum-config-manager ....
echo "gpgcheck=0" >> 文件
yum clean all
yum repolist
ftp /var/ftp/
http /var/www/html/
無vim時 可用vi
win.iso > 4G 刪除後不會存放在Trash中,太大
自動配置yum源
yum -y install vsftpd
systemctl start vsftpd
systemctl enable vsftpd
1.自動完成
2.出錯0
3.防止步驟的丟失
變量名=變量值
注意:
1.等號兩邊不能有空格
2.變量名【字母,數字,下劃線_,不能包含特殊符號,不能以數字開頭】
3.如變量名已經存在,同名變量會被覆蓋
調用變量 $名稱
a=1
echo ${a}RMB 至關於(1+2)*2 有歧義就加個{}
1RMB
寫腳本--測試---完成
備份
SHEEL 弱類型的腳本語言
env 列出全部的環境變量
set 包含全部的變量 使用set可查看全部變量(包括env能看到的環境變量)
系統自帶的都是大寫的
PS1 定義的是命令提示符
PS2 二級提示符
vim test.sh
echo $0 文件名字
echo $1 第一個參數
echo $2 第二個參數
echo $3 第三個參數
echo $* 全部的參數
echo $# 已加載位置變量個數
echo $? 上一個程序的是否成功
useradd tom
echo "12345" | passwd --stdin tom
寫一個腳本,根據用戶需求,來自動建立用戶密碼
#!/bin/bash
useradd $1
echo "$2" | passwd --stdin $1
寫腳本,根據用戶需求建立n個用戶,初始密碼都是123456
./text.sh tom janny lily
for i in $*
useradd
$0 $1 $2 $* $# 系統默認
echo $? 上一個命令是否成功 (0表示成功,1或其餘值表示失敗)
for循環語句
源碼安裝
tar xf
echo $?
./configure
make
make install
$$ 當前進程的進程號
echo $$ > /var/run/test.pid
sleep 1000
重點
重定向
管道
變量(自定義,系統)
keyname=value
1.系統自帶 HOME PATH USER PWD UID
$0 $1 $2 $3 .... $* $# $?
2.自定義 a=1
思惟過程
ps aux | grep test.sh
rpm -q(-query 詢問) vsftpd
2)使用環境變量
當前用戶的環境變量USER記錄了用戶名、LOGNAME記錄了登陸名、HOME記錄了宿主目錄、SHELL記錄了登陸Shell、HOSTNAME記錄主機名、TERM記錄終端類型:
[root@svr5 ~]# echo $USER $LOGNAME $HOME $SHELL root root /root /bin/bash [root@svr5 ~]# echo $HOSTNAME svr5.tarena.com [root@svr5 ~]# echo $TERM xterm
環境變量PS1表示Shell環境的一級提示符,即命令行提示符(\u 用戶名、\h 主機名、\W 工做目錄、\$ 權限標識):
[root@svr5 src]# echo $PS1 //查看默認的一級提示 [\u@\h \W]\$ [root@svr5 src]#PS1='bash-3.2\$' //修改一級提示 bash-3.2# //更改結果 bash-3.2#PS1='[\u@\h \W]\$ ' //恢復原有設置 [root@svr5 src]#
環境變量PS2表示二級提示符,出如今強制換行、at任務編輯等場合:
[root@svr5 ~]# echo $PS2 //查看默認的二級提示 > [root@svr5 src]# cd \ //強制換行,觀察提示符效果 > /root/ [root@svr5 ~]# PS2='=> ' //手動修改二級提示 [root@svr5 ~]# cd \ //再次驗證提示符效果 => ~ [root@svr5 ~]# PS2='> ' //恢復原有設置
\d :表明日期,格式爲weekday month date,例如:"Mon Aug 1"
\H :完整的主機名稱。例如:個人機器名稱爲:fc4.linux,則這個名稱就是fc4.linux
\h :僅取主機的第一個名字,如上例,則爲fc4,.linux則被省略
\t :顯示時間爲24小時格式,如:HH:MM:SS
\T :顯示時間爲12小時格式
\A :顯示時間爲24小時格式:HH:MM
\u :當前用戶的帳號名稱
\v :BASH的版本信息
\w :完整的工做目錄名稱。家目錄會以 ~代替
\W :利用basename取得工做目錄名稱,因此只會列出最後一個目錄
# :下達的第幾個命令
\$ :提示字符,若是是root時,提示符爲:# ,普通用戶則爲:$
中英文轉換
#LANG=zh_CN.UTF-8
4 案例4:變量的擴展應用
4.1 問題
本案例要求進一步熟悉Shell變量的賦值控制,主要練習或驗證下列內容:
三種引號對賦值的影響 使用read命令從鍵盤讀取變量值 使用export發佈全局變量
4.2 步驟
實現此案例須要按照以下步驟進行。
步驟一:三種引號對變量賦值的影響
1)雙引號的應用
使用雙引號能夠界定一個完整字符串。
[root@svr5 ~]# SCHOOL=Tarena IT Group -bash: IT: command not found //未界定時賦值失敗 [root@svr5 ~]# SCHOOL="Tarena IT Group" //界定後成功 [root@svr5 ~]# touch aa bb //建立了兩個文件 [root@svr5 ~]# touch "aa bb" //建立了一個文件 [root@svr5 ~]# ll //查看結果
2)單引號的應用
界定一個完整的字符串,而且能夠實現屏蔽特殊符號的功能。
[root@svr5 ~]# NOTE='當前的用戶是:$USER' [root@svr5 ~]# echo $NOTE 當前的用戶是:$USER //單引號內的 $ 被視爲普通字符
3)反撇號或$()的應用
使用反撇號或$()時,能夠將命令執行的標準輸出做爲字符串存儲,所以稱爲命令替換。
[root@svr5 ~]# tar -czf log-`date +%Y%m%d`.tar.gz /var/log
步驟二:使用read命令從鍵盤讀取變量值
1)read基本用法
執行後從會等待並接受用戶輸入(無任何提示的狀況),並賦值給變量str:
[root@svr5 ~]# read str What's happen ? //隨便輸入一些文字,按Enter鍵提交 [root@svr5 ~]# echo $str //查看賦值結果 What's happen ?
爲了避免至於使用戶不知所措、莫名其妙,推薦的作法是結合-p選項給出友好提示:
[root@svr5 ~]# read -p "請輸入一個整數:" i 請輸入一個整數:240 [root@svr5 ~]# echo $i 240
2)stty終端顯示控制
將回顯功能關閉(stty -echo),
將回顯功能恢復(stty echo)。
可參考下列操做建立一個測試腳本:
[root@svr5 ~]# vim sttyecho.sh //建立一個測試腳本 #!/bin/bash read -p "localhost login: " USERNAME //讀取用戶名 stty -echo //關閉回顯 read -p "Password: " PASSWORD //讀取密碼 stty echo //恢復回顯 echo "" //恢復回顯後補一個空行 echo "Your login name is: $USERNAME" //確認賦值結果 echo "Your password is: $PASSWORD" //確認賦值結果 [root@svr5 ~]# chmod +x sttyecho.sh //添加執行權限
執行測試腳本sttyecho.sh,驗證效果:
[root@svr5 ~]# ./sttyecho.sh localhost login: root //輸入root,回車 Password: //輸入1234567(不會顯示),回車 Your login name is: root //腳本反饋結果 Your password is: 1234567
步驟三:使用export發佈全局變量
默認狀況下,自定義的變量爲局部變量,只在當前Shell環境中有效,而在子Shell環境中沒法直接使用。好比已定義的SCHOOL變量,當進入到sh或bash子Shell後,變量SCHOOL將處於未定義的狀態:
[root@svr5 ~]# echo $SCHOOL Tarena IT Group [root@svr5 ~]# sh //開啓一個sh子進程 sh-3.2# echo $SCHOOL //查看SCHOOL變量值無結果 sh-3.2# exit //返回原有Shell環境 exit [root@svr5 ~]# bash //開啓bash子進程 [root@svr5 ~]# echo $SCHOOL //查看SCHOOL變量值無結果 [root@svr5 ~]# exit //返回原有Shell環境 exit [root@svr5 ~]#
若但願定義的變量能被子進程使用,能夠使用export命令將其發佈爲全局變量。使用export發佈時,只需指定變量名(能夠有多個)便可,也能夠經過export命令直接設置新的全局變量:
[root@svr5 ~]# export SCHOOL //發佈已定義的變量 [root@svr5 ~]# export XX="1234" //發佈新變量 [root@svr5 ~]# NSD="Network&System Direction" [root@svr5 ~]# export NSD YY="5678" //混合式發佈
驗證剛剛發佈的全局變量:
[root@svr5 ~]# sh //進入sh子Shell環境 sh-3.2# echo $SCHOOL //查看全局變量的值 .. .. Tarena IT Group sh-3.2# echo $NSD Network&System Direction sh-3.2# echo $XX $YY 1234 5678 sh-3.2# exit //返回原有Shell環境 exit [root@svr5 ~]#
若要取消全局變量的全局屬性,可結合export命令的 -n 選項;若要取消變量,則應使用unset命令。好比,如下操做可將前面發佈的SCHOOL、XX恢復成局部變量:
[root@svr5 ~]# export -n SCHOOL XX //取消全局變量屬性 [root@svr5 ~]# echo $SCHOOL $XX //局部變量SCHOOL、XX仍可用 Tarena IT Group 1234 [root@svr5 ~]# sh sh-3.2# echo $SCHOOL $XX //全局變量SCHOOL、XX已不可用 sh-3.2# exit //返回原有Shell環境 exit [root@svr5 ~]#
真機yum(loop循環)
40 mkdir -p /var/www/rh7dvd
41 mount -o loop /ISO/rhel-server-7.2-x86_64-dvd.iso /var/www/rh7dvd
42 yum-config-manager --add-repo http://192.168.4.254/rh7dvd
43 vim /etc/yum.repos.d/192.168.4.254_rh7dvd.repo
44 yum clean all
45 yum repolist
46 cd
47 cd /etc/yum.repos.d/
48 ls
49 rm -rf ISO_rhel-server-7.2-x86_64-dvd.iso.repo
50 mkdir -p /var/www/html/rh7dvd
51 umount /var/www/rh7dvd/
52 mount -o loop /ISO/rhel-server-7.2-x86_64-dvd.iso /var/www/html/rh7dvd/
53 yum clean all
54 yum repolist
虛擬機yum
yum-config-manager --add-repo http://192.168.4.254/rh7dvd
vim /etc/yum.repo.d/192.168.4.254_rh7dvd.repo
yum clean all
yum repolist
掛在光盤mkdir /mnt //建立掛在點mount /dev/cdrom /mnt //掛載設備yum-config-manager --add-repo file:///mnt/vim /etc/yum.repo.d/*yum clean allyum repolist