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