① 編寫一個shell程序,實現用for循環輸出1到20間的奇數
#!/bin/sh
for ((i=1;i<20;i=i+2));
do
echo $i
done
類似於DOS下的command.com和後來的cmd.exe。它接收用戶命令,然後調用相應的應用程序。
命令行式shell(Command Line Interface shell ,即CLI shell)
例如:
bash / sh / ksh / csh / zsh(Unix/linux 系統)
(1)shell命令行for擴展閱讀:
傳統意義上的shell指的是命令行式的shell,以後如果不特別註明,shell是指命令行式的shell。
文字操作系統與外部最主要的介面就叫做shell。shell是操作系統最外面的一層。shell管理與操作系統之間的交互:等待輸入,向操作系統解釋你的輸入,並且處理各種各樣的操作系統的輸出結果。
shell提供了與操作系統之間通訊的方式。這種通訊可以以交互方式,或者以shell script方式執行。shell script是放在文件中的一串shell和操作系統命令,它們可以被重復使用。本質上,shell script是命令行命令簡單的組合到一個文件裡面。
② powershell命令行如何用forfiles命令調用gcc編譯多個文件
forfiles不是Powershell的命令,可以用foreach對文件進行遍歷,命令大概如下:
Get-ChildItem-PathF: ew_folder|ForEach-Object{gcc-o$_.FullName}
註解:
gcc的使用及參數我不知道,所以gcc -o $_.FullName只是一個示例。
Powershell獲取的都是對象,FullName屬性表示該對象(文件)的完整路徑。
ForEach-Object可以用%代替,即上面的命令行可以寫成
Get-ChildItem-PathF: ew_folder|%{gcc-o$_.FullName}
如有問題請追問,一直交流。
③ shell命令行下的通配符*有什麼用
shell下的通配符,一般來說主要是用來匹配文件用的
常用的有三個,或者應該只有三個吧,記得不是很清楚了
*,?,[]
其中*代表任意多個字元,如你cd
/後,這時,*就代表/目錄下所有的文件了,echo
*你會看到結果,但不包括所有隱藏的文件,所有隱藏的文件是.*,這里的點號僅僅代表點號而已。當然,你想得到兩個o連在一起的文件怎麼做了?很簡單,就是*oo*,你用echo命令,於是得到了root與boot……
?則是代表單個字元,如echo
???,文件名是三個字元長的都出來的。echo
?i?,於是bin與lib就出來了……
[]則是用來匹配方括弧里的任意一個,比如[abc]就匹配a,b,或者c中的任意一個。結合*號,如echo
[abc]*,則是顯示所有以a或b或c開頭的文件。配合短橫線的話,可以匹配一個范圍。如要匹配以小寫字母開頭的文件怎麼寫了?你不要把所有的小寫字母寫出來,[a-z]*這樣即可,大寫字母當然就是[A-Z]了,數字就是[0-9]了,當然也可以合起來寫[A-Za-z0-9],不用解釋了吧。要記住的是,只是匹配一個而已。再來一個例子:for
i
in
*
;doecho
$i;done。答案嘛,自己試下就知道了。開個shell,隨便練下,很容易掌握的。
啰嗦了這么多,希望對您有用。有一點需要注意,就是不要把通配符與正則元字元混淆了……
④ linux的命令行操作和shell的區別
shell翻譯成殼的意思,它是包裹在linux內核外層的,一個可通過一系列的linux命令對操作系統發出相關指令的人機界面。 shell可以通過其條件語句和循環語句等,把一系列linux命令結合在一起,形成一個相當於面向過程的程序,shell script,來實現一些較為復雜的功能。
總括,shell是linux命令集的概稱,是屬於命令行的人機界面。
免費提供最新Linux技術教程書籍,入門自學書籍《linux就該這么學》,為開源技術愛好者努力做得更多更好
⑤ Linux shell 問題 求解
這是表示foo分別取值三次,並且分別列印出 三個值來,具體其他知識拓展如下:
for 命令
重復執行一系列命令在編程中很常見。通常你需要重復一組命令直至達到某個特定條件,比如處理某個目錄下的所有文件、系統上的所有用戶或是某個文本文件中的所有行。
bash shell提供了 for 命令,允許你創建一個遍歷一系列值的循環。每次迭代都使用其中一個值來執行已定義好的一組命令。下面是bash shell中 for 命令的基本格式。
for var in list
do
commands
done
在 list 參數中,你需要提供迭代中要用到的一系列值。可以通過幾種不同的方法指定列表中的值。
在每次迭代中,變數 var 會包含列表中的當前值。第一次迭代會使用列表中的第一個值,第二次迭代使用第二個值,以此類推,直到列表中的所有值都過一遍。在 do 和 done 語句之間輸入的命令可以是一條或多條標準的bash shell命令。在這些命令中,$var 變數包含著這次迭代對應的當前列表項中的值。
也可以將 do 語句和 for 語句放在同一行,但必須用分號將其同列表中的值分開: for var in list; do 。
1.1.讀取列表中的值
for 命令最基本的用法就是遍歷 for 命令自身所定義的一系列值。
[ceshi@jerry jghml]$ cat test1.sh
#!/bin/bash
# basic for command
for test in Alabama Alaska Arizona Arknsas California Colorado
do
echo The next state is $test
done
⑥ 使用for語句創建命令行上所有整數之和的shell程序
你把sum=' expr $sum + $INT '中的單引號要換成反引號
如下:
sum=` expr $sum + $INT `
然後就行了
親給好評喲!!!!
⑦ 如何利用shell腳本中的eval命令來構造"智能"命令
今天主要介紹一個shell腳本中比較少見的命令--eval
功能說明 :重新運算求出參數的內容。
語 法 :eval [參數]
補充說明 :eval可讀取一連串的參數,然後再依參數本身的特性來執行。
參 數 :參數不限數目,彼此之間用分號分開。
eval命令將會首先掃描命令行進行所有的替換,然後再執行命令。該命令使用於那些一次掃描無法實現其功能的變數。該命令對變數進行兩次掃描。這些需要進行兩次掃描的變數有時候被稱為復雜變數。eval也可以用於回顯簡單變數,不一定是復雜變數。
eval的作用是再次執行命令行處理,也就是說,對一個命令行,執行兩次命令行處理。這個命令要用好,就要費一定的功夫。下面用幾個例子幫助大家理解下。
1、eval一個命令
eval echo相當於echo
2、兩次掃描
該命令適用於依次掃描無法完成其功能的變數。
第一步:對eval後面的命令進行掃描,執行變數替換,普通命令保留
第二步:執行變數替換後的命令串
3、獲得最後一個參數
4、用eval技巧實現shell的控制結構for
用eval技巧實現shell的控制結構for
輸出結果:
注意:bash里有兩個很特殊的變數,它們保存了參數列表。
這里我使用了函數遞歸以及eval實現了for結構。
當執行eval $@時,它經歷了步驟如下:
第1步,分割成eval $@
第6步,擴展$@為hostname
第11步,找到內置命令eval
重復一次命令行處理,第11步,找到hostname命令,執行。
eval是對Bash Shell命令行處理規則的靈活應用,進而構造"智能"命令實現復雜的功能。上面提及的命令是eval其中一個很普通的應用,它重復了1次命令行參數傳遞過程,純粹地執行命令的命令。其實它是bash的難點,是高級bash程序員的必修技能。
⑧ shell命令有哪些保留字
Bash Shell內建命令和保留字
命令
含義
!
保留字,邏輯非
:
不做任何事,只做參數展開
.
讀取文件並在shell中執行它
alias
設置命令或命令行別名
bg
將作業置於後台運行
bind
將關鍵字序列與readline函數或宏捆綁
break
保留字,跳出for、while、until、select循環
builtin
調用命令的內建命令格式,而禁用同名的函數。或者同名的擴展命令
case
保留字,多重選擇
cd
切換當前工作目錄
command
找出內建和外部命令;尋找內建命令而非同名函數
continue
保留字,到達下次for、while、until、select循環
declare
聲明變數定義變數屬性
dirs
顯示當前存儲的列表
disown
將作業從列表中移除
do
保留字,for、while、until、select循環的一部分
done
保留字,for、while、until、select循環的一部分
echo
列印參數
elif
保留字,if結構的一部分
else
保留字,if結構的一部分
enable
開啟和關閉內建命令
esac
保留字,case的一部分
eval
將參數作為命令再次處理一遍
exec
以特定程序取代shell或為shell改變I/O
exit
退出shell
export
將變數聲明為環境變數
fc
與歷史命令一起運行
fg
將作業置於後台運行
fi
保留字,if循環的一部分
for
保留字,for循環的一部分
function
定義一個函數
getops
處理命令行選項
hash
記錄並指定命令的路徑名
help
顯示內建命令的幫助信息
history
顯示歷史信息
if
保留字,if循環的一部分
in
保留字,case、for、select循環的一部分
jobs
顯示後台運行的作業
kill
向進程傳送信號
let
使變數執行算術運算
local
定義局部變數
logout
從Shell中注銷
popd
從目錄棧中彈出目錄
pushd
將目錄壓入棧
pwd
顯示當前工作目錄
read
從標准輸入中讀取一行
readonly
將變數定義為只讀
return
從函數或腳本返回
select
保留字,生成菜單
set
設置Shell選項
shift
變換命令行參數
suspend
終止Shell的執行
test
評估條件表達式
then
保留字,if結構的一部分
time
保留字,輸出統計出來的命令執行時間,其輸出格式由TIMEFORMAT變數來控制
times
針對Shell及其子Shell,顯示用戶和系統CPU的時間和
trap
設置撲捉程序
type
確定命令的源
typeset
聲明變數,定義變數屬性,與declare等價
ulimit
設置和顯示進程佔用的資源限制
umask
設置和顯示文件許可權碼
unalias
取消別名定義
unset
取消變數或函數定義
until
保留字,一種循環結構
wait
等待後台作業完成
while
保留字,一種循環結構
⑨ shell無法執行for循環多行命令
默認的情況下,Shell腳本中的命令是串列執行的,必須等到前一條命令執行完後才執行接下來的命令。shell循環中指令正常使用也是串列的,不過可以使用後台並行執行命令的方法實現並行操作;
例如:
(1)、串列實例:
#!/bin/bash
for(( i = 0; i < ${count}; i++ ))
do
echo commands1
done
(2)、並行實例:
#!/bin/bash
for(( i = 0; i < ${count}; i++ ))
do
{
echo commands1
}&
done
實質就是將操作指令作為後台進程在執行,這樣主進程就不用等待前面的命令執行完畢之後才開始執行接下來的命令,實現並行的效果;自己領會咯。