㈠ 設計一個shell腳本,對該文件夾下的所有文件按照大小進行排序,從大到小輸出每個文件的名字和大小
這不一行命令就搞定了嗎:
ls -lS | awk '{print $9 " " $5}'
你可以將它保存為一個 shell 腳本。
命令運行截圖
ls -lS 的作用是查看文件信息,並以文件大小降序。
awk '{print $9 " " $5}' 的作用是從這些信息中過濾出文件名和文件大小,以空格隔開。
㈡ iOS開發-需要了解的Shell腳本語法
Shell 是一個用 C 語言編寫的程序,它是用戶使用 Linux 的橋梁。Shell 既是一種命令語言,又是一種程序設計語言。Shell 腳本(shell script),是一種為 shell 編寫的腳本程序。在iOS開發中,我們通常編寫一些自動化的腳本文件,來提高我們的生產效率,其本質就是通過Shell腳本對一些 xcodebuild , xcode-select , xcpretty , xcrun 等指令的封裝。本篇文章,我們就針對 Shell 腳本的語法,做一些羅列,以輔助我們去完成一些自動化封裝。
執行腳本
.sh 文件為 Shell 腳本文件格式,通過 sh 指令執行腳本文件
執行結果:
1.通過 echo 輸出變數時,需要使用 $ 或者 ${} 修飾
2. (重點)定義變數時,等號之間不能有空格,不然會誤認為變數為一個指令
3.可以直接修改 name 變數的值,即當前 name 默認為 readwrite 許可權
4.我們給 _var 用 readonly 修飾後,再修改值會拋出異常
執行結果:
執行結果:
執行結果:
執行結果:
$@ 和 $* 都是輸出所有參數,前者是 "$1" "$2" "$3" "$4" ,後者是 "$1 $2 $3 $4"
執行結果:
注意:條件表達式要放在方括弧之間,並且要有空格,例如: [$a==$b] 是錯誤的,必須寫成 [ $a == $b ] 。
關於文件檢測運算符,這里還是都羅列一下吧,比較重要:
執行結果:
執行結果:
執行結果:
執行結果:
2.有參數
執行結果:
注意: $10 不能獲取第十個參數,獲取第十個參數需要 ${10} .
使用 man 查詢 指令文檔
比如我們想查看 xcodebuild 指令下都有哪些操作,直接在終端執行:
當我們不清楚某一個指令下的操作時,就可以通過 man 查詢,然後輔助我們來編寫 Shell 指令。
在iOS下,了解下這些 Shell 語法就足夠了,已經可以幫助我們完成大部分的 Shell腳本 的編寫或者閱讀別人的 Shell 源碼。不需要記憶,簡單看下就可以。
㈢ 怎麼在linux下創建一個可運行腳本
步驟:
1.新建一個.sh文件,touch test.sh
(3)shell腳本設計方案擴展閱讀:
Linux是一套免費使用和自由傳播的類Unix操作系統,是一個基於POSIX和UNIX的多用戶、多任務、支持多線程和多CPU的操作系統。它能運行主要的UNIX工具軟體、應用程序和網路協議。它支持32位和64位硬體。Linux繼承了Unix以網路為核心的設計思想,是一個性能穩定的多用戶網路操作系統。
Linux操作系統誕生於1991 年10 月5 日(這是第一次正式向外公布時間)。Linux存在著許多不同的Linux版本,但它們都使用了Linux內核。Linux可安裝在各種計算機硬體設備中,比如手機、平板電腦、路由器、視頻游戲控制台、台式計算機、大型機和超級計算機。
嚴格來講,Linux這個詞本身只表示Linux內核,但實際上人們已經習慣了用Linux來形容整個基於Linux內核,並且使用GNU工程各種工具和資料庫的操作系統。
腳本(Script)是使用一種特定的描述性語言,依據一定的格式編寫的可執行文件,又稱作宏或批處理文件。
Linux系統的shell作為操作系統的外殼,為用戶提供使用操作系統的介面。它是命令語言、命令解釋程序及程序設計語言的統稱。
shell是用戶和Linux內核之間的介面程序,如果把Linux內核想像成一個球體的中心,shell就是圍繞內核的外層。當從shell或其他程序向Linux傳遞命令時,內核會做出相應的反應。
shell是一個命令語言解釋器,它擁有自己內建的shell命令集,shell也能被系統中其他應用程序所調用。用戶在提示符下輸入的命令都由shell先解釋然後傳給Linux核心。
㈣ linux中設計一個shell腳本程序可以接受命令行輸入的參數執行相應的菜單命令
之所以用到命令行參數,關鍵在於shell腳本需要與運行腳本的人員進行交互。
bash shell提供了命令行參數添加在命令後面的數據值)、命令行選項修改命令行為的單字元值)和直接讀取鍵盤輸入。
1、命令行參數
向shell腳本傳遞數據的最基本方式是使用命令行參數。
1)讀取參數
讀取輸入的參數的變數為位置參數,位置參數通過標准數字表示,
其中$0為程序名稱,$1為第一個參數,$2為第二個參數,依次類推,直到$9為第九個參數。
shell腳本自動將命令行參數賦值給各個位置變數。
同時輸入多個參數可以是數值也可以是字元串)時,必須使用空格分隔要想在參數值中包含空格,就必須使用單引號或雙引號)
當參數多於9個後,必須在shell腳本內使用大括弧將變數括起來,如${10}。從而可以使用任意個參數。
2)讀取程序名稱
傳遞給變數$0的字元串實際上是程序的路徑根據調用方法決定是相對還是絕對路徑)。
使用basename命令可以去掉路徑前綴,只獲得程序名稱名字中不 可以有空格)。
3)測試腳本
當腳本認為應該包含參數,卻實際上沒有數據時,就會出錯。
好的方法是對參數進行檢查來保證使用參數前確實存在數據,可以使用-n參數來檢查。
例子:if [ –n 「$1」 ] then .. else .. fi
2、特殊的參數變數
用於跟蹤命令行參數
1)參數計數
使用特殊變數$#測試執行腳本時包含的命令行參數個數。腳本中任何位置都可以 使用$#
例子:if [ $# –ne 2 ] 即可測試參數個數
可以使用${!#}來返回最後一個命令行參數當無參數時,$#為0,而${!#}為程序名)
2)獲取所有數據
變數$*將命令行中提供的所有參數作為一個單詞處理,它將多個參數看成 一個參數。
變數$@將命令行中提供的所有參數作為同一個字元串中的多個單詞處理。 允許對其中的值進行迭代一般使用for),分隔開不同參數
3、移位
shift命令能夠改變命令行參數的相對位置。默 認將每個參數變數左移一個位置變數$0不變,把$1丟棄,注意不可以恢復了!)
在不清楚參數數目情況下,這是一個迭代參數的好辦法。
可以為shift提供一個參數,來實現多位移變化。
4、處理選項
選項是由破折號引導的單個字母,用於更改命令的行為。
1,找出選項
1)處理簡單選項
可以使用處理命令行參數相同的方法處理選項,抽取時使用case語句進行判斷是否符合選項格式。
2)從參數中分離選項
同時使用選項和參數時,可以使用--指示選項列表的結束。發現--後,shell就知道後面的是普通參數了,停止使用case處理選項。
3)處理帶值的選項
選項後緊跟參數值,一種方法是在case中對應選項後使用shift和讀後一位參數的方法處理。更好的方法如 下:
2,使用getopt命令
getopt命令在處理選項和參數時非常方便。它對參數進行重新組 織,以便於解析
1)命令格式
getopt可以接受任意形式的選項和參數列表,並自動將它們轉換為適當的格式。
命令格式為: getopt options optstring parameters
選項字元串(opstring)用於定義命令行中的有效選項字母,以及哪些選項字母需要參數值。
2)腳本中使用getopt
需要使用set命令將現有的命令行選項和參數替換為getopt命令生成的 格式化形式。
需要將原始腳本命令行參數送給getopt命令,然後將getopt命令輸出送給set命令,如下:set – `getopts –q ab:cd 「$@」`
但是getopt命令不能很好的處理帶有空格的參數值,它將空格解析為參數分隔符,而不是將雙引號引起來的兩個 值合並成一個參數。解決辦法如下:
3)更高級的getopts命令
getopts命令順序的對現有的shell參數變數進行處理,每調用一次,只處理命令中檢測到的參數中的一個。處理完所有參數後,以大於0的退出 狀態退出。
非常適宜於在循環中解析所有命令行參數
格式為: getopts optstring variable
$optarg包含需要參數值的選項要使用的值,$optind包含getopts停止處理時在參數列表中的位置。
注意:當getopts處理時,會將選項前的-去掉,所以對應的case中不需要破折號。
好的特性:
1)可以在參數值中包含空格
2)選項字母和參數值中間可以沒有空格
3)將在命令行中找到的未定義的選項都綁定為單一的輸出——問號
5、標准化選項
有一些字母選項具有標准含義。最好按照標准含義定義選項意義
-a –c –d –e –f –h –i –l –n –o –q –r –s –v- x –y
6、獲取用戶輸入
當需要在執行過程中獲得執行腳本人員的輸入,使用read命令
1)基本讀取
read命令接受標准輸入或其他文件描述符輸入。讀入後將數據放入 一個標准變數中。
-p 允許在read命令行中直接指定一個提示。
可以指定多個變數,也可以不指定將放置在reply環境變數中)
2)計時
使用-t指定一個計時器,計時數滿還未輸入,read返回一個非0的退出狀態。
使用-n指定輸入的字元個數,輸入達到預定數目時,就自動結束輸入
3)默讀
使用-s使輸入不顯示在終端例如輸入密碼)
4)讀取文件
最常用的方法是使用cat命令,並通過管道傳給包含read的while語句。
㈤ shell腳本的常用循環
在簡單介紹shell腳本(shell script)之前,先簡單介紹一下shell。
在計算機科學中, shell (殼層)指「為用戶提供用戶界面」的軟體,通常指的是命令行界面的解析器。一般來說,這個詞是指操作系統中,提供訪問內核信緩所提供之服務的程序。Shell也用於泛指所有為用戶提供操作界面的程序,也就是程序和用戶交互的介面。因此與之相對的是程序內核(英語:Kernel),內核不提供和用戶的交互功能。
不過這個詞也拿來指應用軟體,或是任何在特定組件外圍的軟體,例如瀏覽器或電子郵件軟體是HTML排版引擎的shell。Shell這個詞是來自於操作系統(內核)與用戶界面的外層界面。
通常將shell分為兩類:命令行與圖形界面。命令行殼層提供一個命令行界面(CLI);而圖形殼層提供一個圖形用戶界面(GUI)。
shell腳本 (英語:shell script),又稱shell命令稿、程序化腳本,是一種電腦程序與文本文件,內容由一連串的shell命令組成,經由Unix Shell直譯其內容後運作。被當成是一種腳本語言來設計,其運作方式與解釋型語言相當,由Unix shell扮演命令行解釋器的角色,在讀取shell腳本之後,依序運行其中的shell命令,之後輸出結果。利用shell腳本可以進行系統管理,文件操作等。
在Unix及所有的類Unix系統中,如Linux、FreeBSD等操作系統,都存在shell腳本。依照Unix shell的各種不同類型,shell腳本也有各種不同方言,如 Bourne shell (sh), Bourne-Again shell (bash), C shell (csh)等等敗猛。在DOS、OS/2、Microsoft Windows中的批處理文件,跟shell腳本有類似的功能。
常見的shell腳本循環語法包括for、while和until。除此之外,還有一些其他語法,能夠實現循環(遍歷)功能。和循環相關的還有循環控制符break和continue,用於控制流程轉向。
for循環屬於「當型循環」,即「當滿足條件的時候執行」。
for循環有三種類型:
常見的數值for循環語法還有:
for file in $( ls )語法的等效語法有很多,如下:
或者
類C風格的for循環,和C沒有太大的區別,這里只進行示例,不再贅述。
或者
結果:
也稱為前測試循環語句,重復次數是利用一個條件來控制是否繼續重復執行這個語句。為了避免死循環,必須保證循環體中包含循環出口條件即表達式存在退出狀態為非0的情況。例如,計算1~100以內所有的奇數之和:
當然,條件可以使字元串,可以是輸入值,可以是標記等,此處不再贅述。
until命令和while命令類似,while能實現的功能until也可以實現。但區別是until循環的退出狀態是為0(與while剛好相反),即whie循環在條件為真時繼續執行循環,而until則在條件為假時執行循環。
例如,計算1~100以內所有的奇數之和:
select結構從技術角度看不能算是循環結構,只是相似而已,它是bash的擴展結構用於互動式菜單顯示,功能類似於case結構,但是比case的交互性要好。在遍歷列表功能中,select結構可以實現循滑枯模環的功能。
例如,以下選擇,只有選擇white的時候,退出循環
在循環語法中,經常需要根據條件控制循環退出或跳過本次執行,這時候就需要用到循環控制符。循環控制符主要包括兩個:break和continue。
循環控制符和C以及Java等常見語法功能類似,在理不再贅述,只給出常用示例。
在for、while和until循環中break可強行退出循環。
注意 :break語句僅能退出當前的循環,如果是兩層循環嵌套,則需要在外層循環中使用break。
例如,計算1~100以內所有的奇數之和:
在for、while和until中用於讓腳本跳過其後面的語句,執行下一次循環。
例如,顯示10以內能被3整除的正整數。
以上是自己在學習Linux的過程中的一部分總結,和大家共享。同時,也參考了其他人的博客,在參考列表中列出來了。
㈥ 設計一個shell腳本程序,要求有如下功能: 實現自動備份功能和清理備份等
#!/bin/bash
TIME=`date+%Y%m%d|cut-b3-8`
#question1
tar-zcvf/home/bak/VAR_$TIME_BAK.gzip/var
#question2
ls-l/var>>/home/bak/VAR_$TIME_BAK.log
#question3
find/home/bak-name'*gzip'-mtime+1|xargsrm-rf
腳本名字backup.sh,放到/root下,然後用root創建cronjob
0 12 * * * /root/backup.sh
#question 4 (以redhat為例)
echo " /root/backup.sh " >> /etc/rc.local
#question 5
把下列代碼寫入cronjob中
#!/bin/bash
TIME=`date+%Y"/"%m"/"%d""%H":"%m`
if[-f/home/shell.log]
then
echo"$TIMErunning">/home/tmp.log
cat/home/shell.log>>/home/tmp.log
mv/home/tmp.log/home/shell.log
else
touch/home/shell.log
fi
腳本名字status.sh,放到/root下 (寫的有點小問題,功能執行沒問題)
0 * * * * /root/status.sh
㈦ shell腳本是什麼
當執行命令或程序語句是通過程序文件而不是命令行,那這個程序被稱為Shell腳本。如果Shell腳本內置很多命令、語句及循環控制,然後一次性執行完畢,這種通過文件執行腳本的方式稱為非交互方式。用戶可以在Shell腳本中輸入一系列命令及命令語句組合。這些命令、變數和流程式控制制語句等有機地結合在一起,就形成一個功能強大的Shell腳本。