外貿(mào)網(wǎng)站案例成都百度業(yè)務(wù)員電話
聲明
通過(guò)學(xué)習(xí)?瀧羽sec的個(gè)人空間-瀧羽sec個(gè)人主頁(yè)-嗶哩嗶哩視頻,做出的文章如涉及侵權(quán)馬上刪除文章
筆記的只是方便各位師傅學(xué)習(xí)知識(shí),以下網(wǎng)站只涉及學(xué)習(xí)內(nèi)容,其他的都與本人無(wú)關(guān),切莫逾越法律紅線,否則后果自負(fù)
一、建立Shell文件
1. Shell簡(jiǎn)介
Shell是一種命令行界面,用于用戶與操作系統(tǒng)進(jìn)行交互。它也是一種腳本語(yǔ)言,允許用戶編寫(xiě)程序自動(dòng)執(zhí)行一系列命令。
Linux系統(tǒng)中常見(jiàn)的Shell類型包括bash、sh、dash等,其中bash是最常用的Shell之一。
2.建立一個(gè)1.sh文件
vim 1.sh
可以利用 #! /bin/bash,#! /bin/dash,#! /bin/sh
ls -l “路徑” 是查看權(quán)限的?
這三種其實(shí)不管用哪種腳本解釋器最后調(diào)用的還是這個(gè)dash
比如ls -l bin/sh 發(fā)現(xiàn)調(diào)用的還是dash
比如我們用?echo longyu.com?保存退出
運(yùn)行一下 ./1.sh
就會(huì)輸出 longyu.com (在復(fù)現(xiàn)的時(shí)候記得給予1.sh權(quán)限)
如果出現(xiàn)權(quán)限不足的情況時(shí) 如圖 rw可讀權(quán)限
使用指令:chmod u+x 8.sh?
這里使用的是777 然后直接 ./8.sh文件即可
3.sh
vim 2.sh
直接編輯模式輸入 echo baidu.com
默認(rèn)是沒(méi)有權(quán)限的
但是我們利用 sh 2.sh
照樣執(zhí)行成功 bash 2.sh 或者 dash 2.sh 一樣成功,因?yàn)樗麄兌际悄_本解釋器,自帶權(quán)限
我們執(zhí)行腳本是在當(dāng)前目錄下執(zhí)行的,如果你的腳本在別的目錄
你就要去到那個(gè)目錄,或者指定好對(duì)應(yīng)路徑
4.source
利用source 2.sh 執(zhí)行和sh命令差不多
只不過(guò)這個(gè)命令就是對(duì)顏色加深標(biāo)注了
比如我們重編輯一下這個(gè)文件
直接把ls命令放到2.sh里面去 sh 2.sh 可以看見(jiàn)直接輸出了當(dāng)前目錄下的 2.sh顏色加深了
這個(gè)例子就是給大家說(shuō)明一下這個(gè)shell腳本如何在這個(gè)里面進(jìn)行一個(gè)執(zhí)行
二,變量
1.變量聲明和定義
舉例 定義一個(gè)name變量,name="xiaoyu"
再利用 echo $name 打印出來(lái),這就是簡(jiǎn)單的變量聲明
比如 age="27" ? echo $age 打印出來(lái)的 27
我們來(lái)寫(xiě)復(fù)雜點(diǎn),比如說(shuō) echo my name is $name,and my age is $age years old
然后就直接打印出了 姓名 和年紀(jì)
一般來(lái)說(shuō)加雙引號(hào)和不加效果是一樣的
echo "my name is $name,and my age is $age years old"
加單引號(hào)效果是不一樣的
echo 'my name is $name,and my age is $age years old'
你會(huì)發(fā)現(xiàn)他并沒(méi)有把變量賦值打印出來(lái),而是直接把變量寫(xiě)進(jìn)來(lái)了
區(qū)別就是不加或者雙引號(hào)可以輸出變量,但是加入單引號(hào)他會(huì)把變量當(dāng)字符串輸出出來(lái)
2.變量拼接
echo "my name is $name,and my age is $ageyears old"
這個(gè)例子中 years與age之間沒(méi)有空格 所以打印出來(lái)為空
因?yàn)樽兞繘](méi)有事先定義 所以為空
解決辦法 將變量用雙引號(hào)括起來(lái)它就會(huì)做一個(gè)區(qū)分
echo "my name is $name,and my age is "$age"years old"
那么除了""還能用什么呢 用{}也可以
echo "my name is $name,and my age is {$age}years old"
這樣輸出的變量會(huì)將輸出內(nèi)容利用花括號(hào)框起來(lái)
上面講的全部是臨時(shí)的一個(gè)變量,變量是由數(shù)字,字符串下劃線組成,
但是不能以數(shù)字開(kāi)頭?例如9name,這種是不行的
變量中間最好不要有空格 比如說(shuō)wanhao
如果非要用這種可以加個(gè)下劃線?wan_hao="wanhao" 這種
我們?cè)趺床榭次覀兌x的變量呢比如說(shuō)利用set命令,
比如說(shuō)set | grep name,怎么刪除變量呢我們使用 unset name
再次查看set | grep name就發(fā)現(xiàn)沒(méi)有了
3.常見(jiàn)變量
echo $HOME(家目錄 root用戶)
/root
Windows中環(huán)境變量在path下添加
echo $HOME(家目錄 root用戶)
/root?
which --a ls (通過(guò)這個(gè)命令查看ls命令腳本所在路徑)
再看看 echo $PATH 這么一個(gè)環(huán)境變量
usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sin:/bin:/usr/local/games:/usr/games
查看輸出結(jié)果 存在/usr/bin 目錄 就是當(dāng)我們執(zhí)行l(wèi)s它會(huì)幫我們找到對(duì)應(yīng)得目錄做一個(gè)執(zhí)行,也就是Is得完整路徑應(yīng)該是 /usr/bin/ls 腳本
(1)方法一
根據(jù)剛剛的說(shuō)法
那我們能不能把我們1.sh腳本:直接寫(xiě)到/usr/bin/目錄下,然后在kali終端直接輸出呢
就是把腳本直接放入已經(jīng)定義好的路徑當(dāng)中去
mv 1.sh /usr/bin
(2)方法二
那么我們也可以把/root/這個(gè)目錄直接添加到環(huán)境變量中去讓整個(gè)目錄的文件都可以直接執(zhí)行
export PATH=/root:PATH
echo $PATH (查看環(huán)境變量中root目錄是否被添加)
export: 是一個(gè)用于設(shè)置環(huán)境變量的關(guān)鍵字,使得設(shè)置的變量可以在當(dāng)前 shell 以及由該 shell 啟動(dòng)的子進(jìn)程中生效。
PATH: 這是一個(gè)非常重要的環(huán)境變量,它定義了系統(tǒng)在哪些目錄下去尋找可執(zhí)行程序。當(dāng)你在命令行輸入一個(gè)命令(如ls、cat等)時(shí),系統(tǒng)會(huì)根據(jù)PATH環(huán)境變量所指定的目錄順序去查找對(duì)應(yīng)的可執(zhí)行文件,找到后就執(zhí)行它。
/root:PATH: 這里是在重新定義PATH的值。它將/root目錄添加到了原有的PATH變量值的最前面(假設(shè)原有的PATH值存儲(chǔ)在變量PATH中,這里通過(guò):PATH的形式保留了原來(lái)的值并添加了新的部分)。這樣做的結(jié)果是,當(dāng)系統(tǒng)去查找可執(zhí)行程序時(shí),會(huì)先在/root目錄下查找,然后再按照原來(lái)PATH所指定的其他目錄順序查找。
4.永久變量
剛剛的export只是設(shè)置了臨時(shí)變量,那么我們只有把它寫(xiě)入到配置文件當(dāng)中才能永久生效
vi .bashrc
export PATH=/root:PATH
source /usr/bin/ .bashrc
source (變量生效 或者重啟生效)
新開(kāi)一個(gè)窗口查看變量 1.sh 是否生效
5.字符串相關(guān)的操作
假設(shè)我們想知道一個(gè)字符串的長(zhǎng)度,比如我們想解析一個(gè)字符串的長(zhǎng)度我們?nèi)绾芜M(jìn)行實(shí)現(xiàn)?
比如 name="wanhao" age=27 然后我們通過(guò)echo"my name is$name,and i am $age years old" 打印完整字符串
str="hello word"
echo ${#tstr}
012345 6個(gè)字符
echo ${str:0:6}
三、腳本程序傳遞參數(shù)
腳本如下:
echo 執(zhí)行的文件名是: $0
echo 第一個(gè)參數(shù)是: $1
echo 傳遞的參數(shù)作為一個(gè)字符串顯示: $*
echo 傳遞的參數(shù)獨(dú)立作為每個(gè)字符串顯示: $@
echo 傳遞到腳本的參數(shù)個(gè)數(shù)是: $#
echo 最后命令的退出狀態(tài): $?
echo 腳本運(yùn)行的當(dāng)前進(jìn)程ID是: $$
可以向腳本程序傳遞一個(gè)或多個(gè)參數(shù),腳本出的$1,里面的數(shù)字是可以依次遞增的,比如$1,$2,$3等等,其中的$0(比較特殊表示文件名稱)
那么好 我們利用 vim 寫(xiě)入腳本3.sh,再利用sh 3.sh執(zhí)行文件,我們看看執(zhí)行結(jié)果:
執(zhí)行的文件名是:3.sh
上面顯示第一個(gè)參數(shù)為空,因?yàn)槲覀儧](méi)有給它指定任何一個(gè)參數(shù),我們給他指定一個(gè)參數(shù)name,sh 3.sh name
然后第一個(gè)參數(shù)就為name
那么假設(shè)我們加入第二個(gè),第三個(gè)參數(shù),修改腳本
vim 3.sh
指定參數(shù)名分別為 sh 3.sh 1 2 3
由此得出 參數(shù)傳遞一般為
$n (n表示數(shù)字 可遞增)
$* 就是將參數(shù)當(dāng)作統(tǒng)一的字符串顯示出來(lái),
$@ 是將每個(gè)字符串當(dāng)作獨(dú)立的字符串顯示,這也是$*和$@的區(qū)別
$# 代表參數(shù)的個(gè)數(shù)
$? 是查看命令執(zhí)行狀態(tài)的,如果顯示為0,那么命令就是正常執(zhí)行的,其他數(shù)字就是出錯(cuò)了
$$ 就是查看腳本當(dāng)前進(jìn)程id的
四、shell編程中進(jìn)行數(shù)學(xué)運(yùn)算
1.數(shù)學(xué)運(yùn)算
shell編程在數(shù)學(xué)運(yùn)算的時(shí)候是相當(dāng)麻煩的,python中的數(shù)學(xué)運(yùn)算可能很簡(jiǎn)單
在shell編程中 利用expr進(jìn)行運(yùn)算
expr 7+18 回顯 7+18 那么該怎么運(yùn)算呢 expr 7 + 18 這樣寫(xiě)就行了 7(空格)+(空格)18
以上方法適用于加法減法
如果用乘法就會(huì)報(bào)錯(cuò)
expr 20?\* 10?(乘法是用\* python直接*就行了 要用\進(jìn)行轉(zhuǎn)義)
那么如果是除法就有兩種方法 一種是 /取整數(shù),%取余數(shù)
expr 20?/ 10
expr 20?% 10
2.混合運(yùn)算
expr 5 + 10 \* 7 (shell會(huì)按照先乘除后加減運(yùn)算)
expr ( 5 + 10?\) \* 7
如果有括號(hào)這樣直接運(yùn)算就會(huì)報(bào)錯(cuò),括號(hào)也要進(jìn)行轉(zhuǎn)義
expr \* 2
3.運(yùn)算與變量結(jié)合
num=`expr 5 + 6`
echo $num