1. shell腳本中的if中多條件語句如何寫。
可以使用 if-elif-else 語法來寫多條件語句。
1、首先要理解if-else的基本用法,if條件+then操作+else操作+fi閉合,書寫方法如下:
2、 shell語法中[[ ]]和[ ]的主要區別
(1) [ ] 實際上是bash 中 test 命令的簡寫。即所有的 [ expr ] 等於 test expr。
對 test 命令來說, 用 -eq 要進行數字比較,而你此時傳入字元串,就報錯了。
(2) [[ ]] 是內置在shell中的一個命令,它比test強大的多。支持字元串的模式匹配(使用=~操作符時甚至支持shell的正則表達式)。邏輯組合可以不使用test的-a,-o而使用&& ||。
2. shell 腳本 if 的用法小問題
1. 執行shell腳本的時候加上 -x ,執行腳本時會把過程列出來!(有利於我這種新手學習)sh -x shell (./shell 也可以執行shell腳本 但是沒有-x參數)2. 傳的值的個數大於 read 定義的接受變數的時候會把多餘的值都給最後一個變數!!3. expr 對整數型變數進行運算 如果運算結果不是整數小數點後面的全部省去 (乘號要用轉意字元'/') .4. 在shell腳本裡面 執行一條輸出的命令(pgrep mysqld)怎麼吧輸出的結果作為值賦給變數?web=$(/usr/bin/pgrep mysqld) #可以用 變數=$(命令) 和 變數=`命令` 來吧命令執行的結果賦給變數
if [ $web = ]
then
/etc/init.d/mysql start
fi
5.查看某個命令所在的位置可以用 whereis /which/type 三個命令來查看6.awk命令的應用作用:分段提取! (一行為單位來進行分段)awk -F [分隔符] '條件 動作' /對象例: awk -F : '$3==0 {print $1}' /etc/passwd例: awk -F : '$1 == root {print $1} ' /etc/passwd# -F : 用:分割passwd每行的內容 ($1 指第一段內容 $2 指第二段內容$n 指第n段內容)# ' 匹配 動作' 單引號裡面寫的是 匹配命令和列印動作 匹配$3==0 第三段等於0 列印{print $1} 列印第一段內容 ($3 == 0 匹配出行 在列印出這些行的第一段內容 )
3. shell腳本 if判斷條件問題
你既然已經知道這個文件叫什麼就沒有意義了。。。。理論上應該用find命令或者你知道這個目錄在系統中的什麼位置。
比如
ls | grep aaa
a=`echo $?`
b=`ls | grep aaa`
if [ $a -eq 0 ]
then
tar zcvf Name.tar.gz $b
else
echo 'Don't have this file.'
fi
4. 關於shell 中的if 邏輯表達式。
if expression
then
commands
fi
這是if其中的一種結構,在結構中就能看到if 後面接的是什麼。
這個後邊描述的是你想要干什麼,根據你的需要去描述出來然後進行下一步的操作
這個並不是固定的。你還是看書吧。。書上寫的比這里回答的人描述的詳細。
if和then的語法 如果if和then處在同一行 中間需要用;隔開,如果不在同一行可以不用寫
if grep "file " /tmp/tmp.txt ;then 這屬於語法格式,這個是固定的。其實一行內多個命令之間都需要用;號隔開。如果不在同一行就不用考慮。就像你在終端輸入命令一樣,一行一個命令。一行多跳命令需要用;隔開。。也是這個道理。至於!取反。。!屬於操作符 舉個例子來說 $A = $B 如果結果匹配 執行 then 不匹配執行else $A != $B !=就是不等 !進行取反操作 如果判斷結果匹配 執行then 不匹配執行eslse
哇。。說了好多廢話。。我還是強烈建議你仔細看書。。
______________________________________________
1)我還是建議你看書,而且是看對書,我說的這些都是書上有的。
關於[]你不應該理解成test語法才需要 test就是[] []就是test
拋開if不講 test也可以單獨使用 比如test xxx 寫成 [xxxx]意思是一樣的。
至於里邊加的參數,就涉及到你的需求 要干什麼 要判斷字串?整數?表達式?文件?
跟用test 還是用 []並沒有太大關系 舉個例子 test $? -le 0 和 [ $? -le 0] 意思是一樣的
2)要解釋if ! grep "file" /tmp/tmp.txt ; then 首先你要明白系統所設置的操作符。比如= 比如+、-、*、/、這些都是操作符,至於! 屬於位操作符, 我下班了。有空聊
5. 在SHELL腳本里看到 if [ $# -lt 7 ]; then ,請高手詳細解釋
$#取得shell腳本參數個數,
-lt即lessthan,小於,
$0取得腳本名稱(包含路徑)
若判斷參數個數小於7個,則用echo列印正確的使用方法,並用exit退出腳本。
Usage:腳本名稱subjectanalysis_diranat_nameanat_dir_namesanlm_denoisednum_scansgcut
後面分別是7個參數。
其實,通常用`basename$0`來去除路徑得到純粹的腳本名,並且在退出腳本時將返回狀態置為非0。
if[$#-lt7];
then
echo-e" Usage:`basename$0`subjectanalysis_diranat_nameanat_dir_namesanlm_denoisednum_scansgcut "
exit1
fi
6. shell腳本if循環問題
剛看到,這么寫可以實現,代碼在linux上測過了:
#!/bin/bash
arr=(10 11 30)
for a in ${arr[*]}
do
ouput_s=$((ouput_s+a))
sum=$((sum+1))
done
echo "$ouput_s"
echo "$sum"
輸出:
51
3
7. linux shell if語句中~是什麼意思
if為判斷語句,判斷某個東西是否達到設定的條件。
1,格式為:
if語句格式
if條件
then
Command
else
Command
fi別忘了這個結尾
2,if的三種條件表達式:
ifcommandthen
if函數then命令執行成功,等於返回0(比如grep,找到匹配)執行失敗,返回非0(grep,沒找到匹配)
if[expression_r_r_r]then表達式結果為真,則返回0,if把0值引向then
iftestexpression_r_r_rthen表達式結果為假,則返回非0,if把非0值引向then
8. 在linux下shell腳本中if中用到or怎麼寫
linux下shell腳本的邏輯的or用運算符 || 表示,if中用到or的寫法實例如下:
a=10
b=20
if[[$a-lt 50||$b-gt 50]]
then
echo"返回 true"
else
echo"返回 false"
fi
其中$a-lt100表示a<50 為真;$b-gt 50 表示b>50為假;真 or 假為真。
所以輸出結果為:返回 true
(8)shell腳本if擴展閱讀
1、shell中流程式控制制if基本語法介紹:
if condition
then
command1
command2 ...
commandN
fi
2、shell中的另一個邏輯運算符and (&&)用法實例介紹:
a=10
b=20
if[[$a-lt100&&$b-gt100]]
then
echo"返回 true"
else
echo"返回 false"
fi
輸出結果為:返回 false
9. shell腳本的if
_day=`echo `cal $_month $_year`|awk 』{print $NF}』`
這一句嵌套`符號有問題。不信你把這句注釋掉看看是不是就沒問題了。
兩兩匹配的原則是就近匹配,即這句會拆分為下面三段:
`echo `
cal $_month $_year
`|awk 』{print $NF}』`
這顯然不是你預期的。
建議:
1)在需要多層嵌套的情況下,最好不要用``,用它的替代品$()。
2)多層嵌套一定要用``的話,裡面的`要用反斜杠作跳脫處理(寫成\`)。
建議你去看《shell十三問》,搜索一下就能找到,上面專門有寫這個。
兩種修改方法分別為:
1) _day=$(echo $(cal $_month $_year)|awk '{print $NF}')
2) _day=`echo \`cal $_month $_year\`|awk '{print $NF}'`
10. shell腳本中 if 判斷時候-s是什麼意思
指的是文件大小非0時為真。