විචල්යයක් නූලකට සංසන්දනය කරන්නේ කෙසේද (ඒවා ගැලපෙන්නේ නම් යමක් කරන්න)?
විචල්යයක් නූලකට සංසන්දනය කරන්නේ කෙසේද (ඒවා ගැලපෙන්නේ නම් යමක් කරන්න)?
Answers:
if [ "$x" = "valid" ]; then
echo "x has the value 'valid'"
fi
ඒවා නොගැලපෙන විට ඔබට යමක් කිරීමට අවශ්ය නම්, ඒ වෙනුවට ආදේශ =
කරන්න !=
. අදාළ ලියකියවිලි වල සංගීත මෙහෙයුම් සහ අංක ගණිතමය මෙහෙයුම් පිළිබඳ වැඩිදුර කියවිය හැකිය .
$x
?ඔබට උපුටා දැක්වීම් අවශ්යය $x
, මන්ද එය හිස් නම්, පහත දැක්වෙන පරිදි ඔබේ බෑෂ් ස්ක්රිප්ටයට සින්ටැක්ස් දෝෂයක් ඇතිවේ:
if [ = "valid" ]; then
==
ක්රියාකරුගේ සම්මත නොවන භාවිතය==
සමානාත්මතාවය සඳහා Bash භාවිතා කිරීමට ඉඩ දෙන බව සලකන්න [
, නමුත් මෙය සම්මත නොවේ .
අවට උපුටා දැක්වීම් $x
විකල්ප වන පළමු අවස්ථාව භාවිතා කරන්න :
if [[ "$x" == "valid" ]]; then
හෝ දෙවන අවස්ථාව භාවිතා කරන්න:
if [ "$x" = "valid" ]; then
[ "$1" == "on" ]
. මෙය ["$ 1" = "on"] ලෙස වෙනස් කිරීමෙන් ගැටළුව විසඳුණි.
=
සහ දෙකක් නොවේ.
[ $x -eq "valid" ]
. -eq
යනු සංඛ්යා සඳහා සංසන්දනාත්මක ක්රියාකරු මිස නූල් නොවේ.
["x$yes" == "xyes"]
කළ x
යුතුද? එය පැරණි කාලයේ ධාතූන් වහන්සේද? නැතහොත් සමහර අවස්ථාවල එය සැබවින්ම අවශ්යද?
නැතහොත්, ඔබට වෙනත් වගන්තියක් අවශ්ය නොවේ නම්:
[ "$x" == "valid" ] && echo "x has the value 'valid'"
echo
එය අසාර්ථක විය හැකිය.
[ "$X" == "valid" ] || ( echo invalid && false ) && echo "valid"
.
{ echo invalid && false; }
වඩා කාර්යක්ෂම වේ ( echo invalid && false )
, මන්ද එය අනවශ්ය උපලේඛනයක් සඳහා ගෙවීම වළක්වයි.
a="abc"
b="def"
# Equality Comparison
if [ "$a" == "$b" ]; then
echo "Strings match"
else
echo "Strings don't match"
fi
# Lexicographic (greater than, less than) comparison.
if [ "$a" \< "$b" ]; then
echo "$a is lexicographically smaller then $b"
elif [ "$a" \> "$b" ]; then
echo "$b is lexicographically smaller than $a"
else
echo "Strings are equal"
fi
සටහන්:
if
හා [
හා ]
වැදගත්>
හා <
හරවා යැවීමේ ක්රියාකරුවන් අතර ඒ සමඟ එය පැන ඇත \>
හා \<
පිළිවෙළින් නූල් සඳහා.$a
තිබීමයි " "
, එබැවින් $b
සාරධර්ම සංසන්දනය කිරීම සඳහා මට ගැලවීමේ චරිතය භාවිතා කිරීමට සිදුවිය. ධාවනය කිරීමෙන් පසු මට මෙය සොයා ගැනීමට හැකි විය bash -x ./script.sh
, -x ධජය මඟින් එක් එක් ක්රියාත්මක කිරීමේ වටිනාකම බැලීමට ඉඩ ලබා දෙන අතර එය නිදොස්කරණය කිරීමට උපකාරී වේ.
ආදේශක කාඩ්පත් භාවිතය සමඟ නූල් සංසන්දනය කිරීම
if [[ "$stringA" == *$stringB* ]]; then
# Do something here
else
# Do Something here
fi
"
ආදේශක කාඩ්පත් වටා අතුරුදහන් වීමද සටහන් කරන්න. (btw: ආදේශක කාඩ්පත් සඳහා +1!)
$stringB
යුතුය (මේ අතර, වම් අත පැත්තේ උපුටා කළ යුතු නොවේ ද,) උපුටා ගත: if [[ $stringA = *"$stringB"* ]]; then
.
එක් කරුණක් තුළ මට එක් ප්රකාශයකට එකඟ නොවිය යුතුය:
[ "$x" == "valid" ] && echo "valid" || echo "invalid"
ඒක හරියට එක වගේ, හ්ම්, ආරම්භක ...
එය එක්තරා ආකාරයකින් භාෂාවක් ලෙස පොදු රටා භාවිතා කරයි;
ඔබ භාෂාව ඉගෙන ගත් පසු.
එය එක් විශේෂ කොටසක් සහිත සරල තාර්කික ප්රකාශනයකි: තාර්කික ක්රියාකරුවන්ගේ කම්මැලි ඇගයීම.
[ "$x" == "valid" ] && echo "valid" || echo "invalid"
සෑම කොටසක්ම තාර්කික ප්රකාශනයකි; පළමුවැන්න සත්ය හෝ අසත්ය විය හැකිය, අනෙක් දෙක සැමවිටම සත්ය වේ.
(
[ "$x" == "valid" ]
&&
echo "valid"
)
||
echo "invalid"
දැන්, එය ඇගයීමට ලක් කළ විට, පළමුවැන්න පරීක්ෂා කරනු ලැබේ. එය අසත්ය නම්, තර්කනයේ දෙවන ක්රියාකාරිත්වයට වඩා සහ &&
එය අදාළ නොවේ. පළමුවැන්න සත්ය නොවේ, එබැවින් එය පළමු හා දෙවැන්න සත්ය විය නොහැක.
දැන්, මේ අවස්ථාවේ දී තර්කනයේ පළමු පැත්ත හෝ ||
අසත්යය, නමුත් අනෙක් පැත්ත - තුන්වන කොටස - සත්ය නම් එය සත්ය විය හැකිය.
එබැවින් තෙවන කොටස ඇගයීමට ලක් කෙරේ - ප්රධාන වශයෙන් පණිවුඩය ලිවීම අතුරු ආබාධයක් ලෙස ය. (එය 0
සත්යය සඳහා ප්රති result ලය ඇත, අප මෙහි භාවිතා නොකරයි)
අනෙක් අවස්ථා සමාන ය, නමුත් සරල ය - සහ - මම පොරොන්දු වෙමි! ඒවා - විය හැකිය - කියවීමට පහසුය!
(මට එකක් නැත, නමුත් අළු රැවුල සහිත යුනික්ස් ප්රවීණයෙකු වීම මේ සඳහා බොහෝ සෙයින් උපකාරී වේ.)
... && ... || ...
එය ශබ්දාර්ථයෙන් සමාන නොවේ ලෙස සාමාන්යයෙන් මත frown ඇත, (කණගාටුයි greybeard යුනික්ස් ප්රවීණ, ඔබ මේ සියල්ල කාලය සඳහා වැරදි හිටියා) if ... then ... else ...
. කණගාටු නොවන්න, මෙය පොදු අනතුරකි .
... && ... || ...
පරිපූර්ණ වලංගු රටාවක් සහ පොදු බාෂ් මෝඩයකි. එය භාවිතා කිරීම මඟින් පූර්ව දැනුම නියම කරයි (ප්රේක්ෂකයන් තුළ ආරම්භකයින් සිටී නම් එය මතකයේ තබා ගැනීම හොඳ විය හැකිය), නමුත් විවෘත මැන්හෝල් ආවරණ වළක්වා ගන්නේ කෙසේදැයි තමන් දන්නා බව ඔප්පු කිරීමට OP හි හිසකෙස් ඇත.
ඔබට use case / esac ද භාවිතා කළ හැකිය
case "$string" in
"$pattern" ) echo "found";;
esac
|
පෙර රටාවන් වෙන් කළ හැකි බව මතක තබා ගන්න )
. මෙම in
ප්රකාශය හා සමාන වේ then
දී if
ප්රකාශ කර තිබුණි. ඔබ පයිතන් සිට පැමිණියහොත් කළ යුතු දේ පිළිබඳ සෑම ලැයිස්තුවකටම තමන්ගේම ප්රකාශයක් ඇති රටා ලැයිස්තුවක් හරහා එය ක්රියාත්මක වන බව ඔබට තර්ක කළ හැකිය. කැමති නැහැ substring in string
, ඒ වෙනුවට for item in list
. *
ඔබට else
කොන්දේසියක් අවශ්ය නම් ඔබේ අවසාන ප්රකාශය ලෙස භාවිතා කරන්න . එය පළමු හමුවීම මත නැවත පැමිණේ.
පහත දැක්වෙන ස්ක්රිප්ට් එක "ටෙස්ටොන්ටීස්" නම් වූ ගොනුවකින් පේළියකින් කියවා එක් එක් පේළිය සරල නූලක්, විශේෂ අක්ෂර සහිත නූලක් සහ සාමාන්ය ප්රකාශනයක් සමඟ සංසන්දනය කරයි. එය නොගැලපේ නම්, ස්ක්රිප්ට් එක පේළිය මුද්රණය කරයි, එසේ නොවේ.
Bash හි අවකාශය එතරම්ම වැදගත් ය. එබැවින් පහත සඳහන් දෑ ක්රියාත්මක වනු ඇත:
[ "$LINE" != "table_name" ]
නමුත් පහත සඳහන් දෑ සිදු නොවේ:
["$LINE" != "table_name"]
එබැවින් කරුණාකර පහත පරිදි භාවිතා කරන්න:
cat testonthis | while read LINE
do
if [ "$LINE" != "table_name" ] && [ "$LINE" != "--------------------------------" ] && [[ "$LINE" =~ [^[:space:]] ]] && [[ "$LINE" != SQL* ]]; then
echo $LINE
fi
done
bash
නමුත් [
ඇත්ත වශයෙන්ම බාහිර ද්විමය නිසා ( which [
අස්වැන්න වැනි දේ /usr/bin/[
)
ආදානයට වලංගු ඇතුළත් කිරීම් කිහිපයක් තිබේ නම් මම බොහෝ විට regexp ගැලපීම් භාවිතා කරමි. උදා: වලංගු ක්රියා "ආරම්භය" සහ "නැවැත්වීම" පමණි.
if [[ "${ACTION,,}" =~ ^(start|stop)$ ]]; then
echo "valid action"
fi
$ACTION
ද්විත්ව කොමාව භාවිතා කිරීමෙන් මම විචල්යය අඩු කරන බව සලකන්න . මෙය එතරම් වයස්ගත වූ බාෂ් අනුවාද වල ක්රියා නොකරනු ඇති බව සලකන්න.
බාෂ් 4+ උදාහරණ. සටහන: උපුටා දැක්වීම් භාවිතා නොකිරීම වචනවල අවකාශයන් ආදිය ඇති විට ගැටළු ඇති කරයි. සෑම විටම Bash, IMO හි උපුටා දක්වන්න.
Bash 4+ හි උදාහරණ කිහිපයක් මෙන්න:
උදාහරණ 1, නූල් වලින් 'ඔව්' සඳහා පරීක්ෂා කරන්න (සිද්ධි සංවේදී නොවේ):
if [[ "${str,,}" == *"yes"* ]] ;then
උදාහරණ 2, නූල් වලින් 'ඔව්' සඳහා පරීක්ෂා කරන්න (සිද්ධි සංවේදී නොවේ):
if [[ "$(echo "$str" | tr '[:upper:]' '[:lower:]')" == *"yes"* ]] ;then
උදාහරණ 3, නූල් වලින් 'ඔව්' සඳහා පරීක්ෂා කරන්න (සිද්ධි සංවේදී):
if [[ "${str}" == *"yes"* ]] ;then
උදාහරණ 4, නූල් වලින් 'ඔව්' සඳහා පරීක්ෂා කරන්න (සිද්ධි සංවේදී):
if [[ "${str}" =~ "yes" ]] ;then
උදාහරණ 5, නිශ්චිත ගැලපීම (සිද්ධි සංවේදී):
if [[ "${str}" == "yes" ]] ;then
උදාහරණ 6, නිශ්චිත ගැලපීම (සිද්ධි සංවේදී නොවේ):
if [[ "${str,,}" == "yes" ]] ;then
උදාහරණ 7, හරියටම ගැලපීම:
if [ "$a" = "$b" ] ;then
විනෝද වන්න.
if [ "$a"="$b" ]
හෝ එය ක්රියා නොකරයි ... සමාන අවකාශයන් තිබිය නොහැක