更新時間:2022-12-16 16:19:20 來源:動力節點 瀏覽1519次
1.shell中定義局部變量
定義局部變量可以使用local,多在函數中應用
1)shell中定義的變量都是global的,其作用域從被定義的地方開始,到shell結束或被顯示刪除的地方為止
2)函數定義的變量是可以被定義成local的,其作用域只限于函數內
2.在執行腳本時bash和source的區別
1、source命令用法:
source 文件名
作用:在當前bash環境下讀取并執行FileName中的命令。該fifilename文件可以無"執行權限"
注:該命令通常用命令“.”來替代。
source(或點)命令通常用于重新執行剛修改的初始化文檔。
source命令(從 C Shell 而來)是bash shell的內置命令。
點命令,就是個點符號,(從Bourne Shell而來)。
source的程序主體是bash,腳本中的$0變量的值是bash,而且由于作用于當前bash環境,腳本中set的變量將直接起效
2、sh,bash的命令用法:
sh/bash 文件名
作用:打開一個子shell來讀取并執行FileName中命令。該fifilename文件可以無"執行權限"
注:運行一個shell腳本時會啟動另一個命令解釋器.
每個shell腳本有效地運行在父shell(parent shell)的一個子進程里.
這個父shell是指在一個控制終端或在一個xterm窗口中給你命令指示符的進程.
shell腳本也可以啟動他自已的子進程.這些子shell(即子進程)使腳本并行地,有效率地地同時運行腳本內的多個子任務. 在ubuntu中sh只是bash的一個鏈接。由于是在子shell中執行,腳本設置的變量不會影響當前shell。
3、./的命令用法:
./文件名
作用:打開一個子shell來讀取并執行FileName中命令。該fifilename文件需要"執行權限"
注:運行一個shell腳本時會啟動另一個命令解釋器.
每個shell腳本有效地運行在父shell(parent shell)的一個子進程里.
這個父shell是指在一個控制終端或在一個xterm窗口中給你命令指示符的進程.
shell腳本也可以啟動他自已的子進程.
這些子shell(即子進程)使腳本并行地,有效率地地同時運行腳本內的多個子任務.由于是在子shell中執行,腳本設置的變量不會影響當前shell。
3.哪些方式可以將標準輸出和錯誤輸出重定向到文件?
命令 &> 文件名
命令 > 文件名1 2> 文件名2
命令 > 文件名 2>&1
命令 &>> 文件名命令 >> 文件名1 2>> 文件名2
命令 >> 文件名 2>&1
4.正則表達式符號*、+、?、[]、[^]、{n} 分別代表什么含義?
* 表示匹配的前面的字符出現了任意次(包括0次)
表示匹配的前面的字符出現了至少1次(1次或多次)
? 表示匹配前面的字符出現了0次或1次
[] 表示集合,匹配集合中的任意單個字符
[^] 表示對集合取反
{n} 表示精確匹配前面的字符出現了n次
5.日志切割腳本
[root@localhost ~]# vim /usr/local/nginx/logbak.sh #新建腳本名為
logbak.sh
\#!/bin/bash #解釋器
date=`date +%Y%m%d` #自定義date變量,值等于當前日期
logpath=/usr/local/nginx/logs #自定義logpath變量,值等于
Nginx日志所在路徑
mv $logpath/access.log $logpath/access-$date.log #把當前access日志重命名
mv $logpath/error.log $logpath/error-$date.log #把當前error日志重命名
kill -USR1 $(cat $logpath/nginx.pid) #向nginx主進程發USR1信
號,重新打開生成日志文件,如不發送USR1,Nginx將會繼續寫入改名之后的日志
接下來把寫好的腳本寫入計劃任務,自動執行。
[root@localhost ~]# crontab -e #打開計劃任務表
01 02 * * 6 /usr/local/nginx/logbak.sh #每周六凌晨2:01運行腳本進行
日志切割
以上就是“分享五個shell面試題整理”,你能回答上來嗎?如果想要了解更多的Java面試題相關內容,可以關注動力節點Java官網。
0基礎 0學費 15天面授
有基礎 直達就業
業余時間 高薪轉行
工作1~3年,加薪神器
工作3~5年,晉升架構
提交申請后,顧問老師會電話與您溝通安排學習