ආදාන තර්කයක පැවැත්ම පරීක්ෂා කිරීමට මට අවශ්යය. මට පහත පිටපත ඇත
if [ "$1" -gt "-1" ]
  then echo hi
fi
මම ගත්තා
[: : integer expression expectedආදාන පරාමිතිය 1 තිබේදැයි බැලීමට පළමුව එය පරීක්ෂා කරන්නේ කෙසේද?
ආදාන තර්කයක පැවැත්ම පරීක්ෂා කිරීමට මට අවශ්යය. මට පහත පිටපත ඇත
if [ "$1" -gt "-1" ]
  then echo hi
fi
මම ගත්තා
[: : integer expression expectedආදාන පරාමිතිය 1 තිබේදැයි බැලීමට පළමුව එය පරීක්ෂා කරන්නේ කෙසේද?
Answers:
එය:
if [ $# -eq 0 ]
  then
    echo "No arguments supplied"
fi
මෙම $#විචල්ය ඔබ ආදාන තර්ක සංඛ්යාව කියන්න තිර රචනය සම්මත විය කරනු ඇත.
නැතහොත් තර්කයක් හිස් නූලක් ද නැතිනම් ඔබට එය පරීක්ෂා කළ හැකිය:
if [ -z "$1" ]
  then
    echo "No argument supplied"
fi
මෙම -z"$ 1" යන ව්යාප්තිය ශූන්ය string හෝ නොවේ නම් ස්විචය පරීක්ෂා කරනු ඇත. එය ශුන්ය නූලක් නම් ශරීරය ක්රියාත්මක වේ.
exit 1ස්ක්රිප්ට් එක ක්රියාත්මක වීමට තර්කය අවශ්ය වූ විට if වාරණය තුළ ඔබේ දෝංකාරය අවසානයේ එකතු කිරීමට ඔබට අවශ්ය වනු ඇත . පැහැදිලිය, නමුත් සම්පූර්ණත්වය ගැන සඳහන් කිරීම වටී.
                    programname "" secondarg third. මෙම $#චෙක්පත පරිද්දෙන් තේරුම නිශ්චිතවම තර්ක සංඛ්යාව බලයි.
                    if [ ! -z "$1" ]; then ...
                    මේ ආකාරයෙන් නිරූපණය කිරීම වඩා හොඳය
if [[ $# -eq 0 ]] ; then
    echo 'some message'
    exit 1
fiඔබට සාමාන්යයෙන් තර්ක කිහිපයක් ඇත්නම් පිටවිය යුතුය.
exit 1ඔබට සාමාන්යයෙන් අවශ්ය වන අතර [[ ]]සාමාන්යයෙන් වඩා සාධාරණ (iirc) පරීක්ෂණය භාවිතා කරයි . එබැවින් කේතය අන්ධ ලෙස පිටපත් කිරීමේ පුද්ගලයින් සඳහා මෙය වඩා හොඳ පිළිතුරයි.
                    සමහර අවස්ථා වලදී පරිශීලකයා ස්ක්රිප්ටයට තර්කයක් ලබා දී ඇත්දැයි පරීක්ෂා කර බැලිය යුතුය. පහත පිටපතෙහි මෙන්:
scale=${2:-1}
emulator @$1 -scale $scaleමෙන්න පරිශීලකයා scale2 වන පරාමිතියක් ලෙස සමත් වී නොමැති නම් , මම -scale 1පෙරනිමියෙන් ඇන්ඩ්රොයිඩ් ඉමුලේටරය දියත් කරමි . ${varname:-word}පුළුල් කිරීමේ ක්රියාකරුවෙකි. වෙනත් පුළුල් කිරීමේ ක්රියාකරුවන් ද ඇත:
${varname:=word}වන සකසයි අතර ආර්ද්රතාවය varname, ඒ වෙනුවට ආපසු wordවටිනාකම ෙකොපමණද;${varname:?message}වන ප්රතිලාභ එක්කෝ varnameඑය අර්ථ නම් තියෙන්නේ හා ශූන්ය නොවන හෝ මුද්රණය messageහා (පළමු උදාහරණය වැනි) තිර රචනය නැවතිය හැක;${varname:+word}එය ආපසු එන්නේ අර්ථ දක්වා ඇති අතර එය ශුන්ය නොවේ wordනම් පමණි varname; වෙනත් ආකාරයකින් ශුන්ය වේ.${varname?message}. අමතර :අක්ෂර වින්යාසයද, නැතහොත් එය හැසිරීම වෙනස් කරයිද?
                    : ${1?"First argument is null"} ${2?"Please provide more than 1 argument"}
                    උත්සාහ කරන්න:
 #!/bin/bash
 if [ "$#" -eq  "0" ]
   then
     echo "No arguments supplied"
 else
     echo "Hello world"
 fi$#හා 0?
                    else.
                    foo*) සහ වචන බෙදීම වළක්වයි (එනම් වටිනාකමේ අවකාශය අන්තර්ගත නම් බෙදීම). මෙම අවස්ථා $#දෙකෙහිම අදාළ නොවන බැවින් මෙම අවස්ථාවේදී උපුටා දැක්වීම අවශ්ය නොවේ. උපුටා 0දැක්වීම ද අවශ්ය නොවේ, නමුත් සමහර අය සාරධර්ම උපුටා දැක්වීමට කැමැත්තක් දක්වන්නේ ඒවා සැබවින්ම නූල් වන අතර එමඟින් එය වඩාත් පැහැදිලිව පෙනේ.
                    පිටපතට තර්ක ඉදිරිපත් කර ඇත්දැයි සොයා ගැනීමට තවත් ක්රමයක්:
((!$#)) && echo No arguments supplied!ෂෙල් අංක ගණිතයේ(( expr )) නියමයන්ට අනුව ප්රකාශනය ඇගයීමට හේතු වන සටහන .
කිසිදු තර්කයක් නොමැති විට පිටවීම සඳහා යමෙකුට මෙසේ පැවසිය හැකිය:
((!$#)) && echo No arguments supplied! && exit 1ඉහත කීමට තවත් (ප්රතිසම) ක්රමයක් වනුයේ:
let $# || echo No arguments supplied
let $# || { echo No arguments supplied; exit 1; }  # Exit if no arguments!help let පවසයි:
let: let arg [arg ...]Evaluate arithmetic expressions. ... Exit Status: If the last ARG evaluates to 0, let returns 1; let returns 0 otherwise.
exitමගේ zsh ක්රියාවලිය මරා දමනවා වෙනුවට , මම එය භාවිතා returnනොකරන අතර එය විනාශ නොකරමි
                    ((!$#))ඉතිහාසය ආදේශන අවුලුවාලීමට?
                    පෙන්වා දීමට තවත් මූලික කරුණක් ඇති හෙයින් පමණක්, ඔබේ නූල ශුන්යදැයි පරීක්ෂා කළ හැකි බව මම එකතු කරමි:
if [ "$1" ]; then
  echo yes
else
  echo no
fiඒ හා සමානව ඔබ ආර්ග් ගණන් අපේක්ෂා කරන්නේ නම් ඔබේ අන්තිමයා පරීක්ෂා කරන්න:
if [ "$3" ]; then
  echo has args correct or not
else
  echo fixme
fiඕනෑම ආගන් හෝ var සමඟ එසේ කරන්න
තර්කය තිබේද යන්න පරීක්ෂා කිරීමට ඔබ කැමති නම්, තර්ක # ඔබේ ඉලක්ක තර්ක අංකයට වඩා වැඩි හෝ සමානද යන්න පරීක්ෂා කළ හැකිය.
පහත දැක්වෙන පිටපත මඟින් මෙය ක්රියාත්මක වන ආකාරය පෙන්නුම් කරයි
#!/usr/bin/env bash
if [ $# -ge 3 ]
then
  echo script has at least 3 arguments
fiපහත ප්රතිදානය නිපදවයි
$ ./test.sh
~
$ ./test.sh 1
~
$ ./test.sh 1 2
~
$ ./test.sh 1 2 3
script has at least 3 arguments
$ ./test.sh 1 2 3 4
script has at least 3 argumentsකුඩා මතක්, බෑෂ් දී සංඛ්යාත්මක ටෙස්ට් ක්රියාකරුවන් නිඛිල (වැඩ පමණක් ලෙස -eq, -lt, -ge, ආදිය)
මගේ $ vars ints බව සහතික කිරීමට මම කැමතියි
var=$(( var + 0 ))මම ඒවා පරීක්ෂා කිරීමට පෙර, “[: පූර්ණ සංඛ්යා තර්ක අවශ්යයි” දෝෂයෙන් ආරක්ෂා වීමට.
var=$(printf "%.0f" "$var")පාවෙන හැසිරවිය හැකි නමුත් නූලක් දුන් විට ශුන්ය නොවන පිටවීමෙන් පීඩා විඳිති. ඔබට අවුල් සහගත නම්, මම භාවිතා කරන මෙම ක්රමය පූර්ණ සංඛ්යාවක් බලාත්මක කිරීම සඳහා වඩාත්ම ශක්තිමත් බව පෙනේ : var=$(<<<"$var" awk '{printf "%.0f", $0}'). Var සකසා නොමැති නම්, එය පෙරනිමියෙන් "0" වේ. Var යනු පාවෙන නම්, එය ආසන්නතම පූර්ණ සංඛ්යාවට වටකුරු වේ. Values ණ අගයන් ද භාවිතා කිරීමට සුදුසු ය.
                    එක් ලයිනර් බෑෂ් ශ්රිත වලංගුකරණය
myFunction() {
    : ${1?"forgot to supply an argument"}
    if [ "$1" -gt "-1" ]; then
        echo hi
    fi
}ශ්රිතයේ නම සහ භාවිතය එක් කරන්න
myFunction() {
    : ${1?"forgot to supply an argument ${FUNCNAME[0]}() Usage:  ${FUNCNAME[0]} some_integer"}
    if [ "$1" -gt "-1" ]; then
        echo hi
    fi
}පූර්ණ සංඛ්යාවක් දැයි පරීක්ෂා කිරීම සඳහා වලංගුකරණය එක් කරන්න
අතිරේක වලංගුතාවයක් එක් කිරීමට, උදාහරණයක් ලෙස සම්මත කරන ලද තර්කය පූර්ණ සංඛ්යාවක් දැයි බැලීමට, වලංගු කිරීමේ ශ්රිතයක් ඇමතීම සඳහා එක් ලයිනර් වලංගු කිරීම වෙනස් කරන්න:
: ${1?"forgot to supply an argument ${FUNCNAME[0]}() Usage:  ${FUNCNAME[0]} some_integer"} && validateIntegers $1 || die "Must supply an integer!"ඉන්පසු, තර්කය වලංගු කරන වලංගු කිරීමේ ශ්රිතයක් සාදන්න, සාර්ථකත්වයට 0 ක්, අසාර්ථකත්වයට 1 ක් සහ අසාර්ථකත්වය මත ස්ක්රිප්ට් අහෝසි කරන ඩයි ශ්රිතයක් සාදන්න
validateIntegers() {
    if ! [[ "$1" =~ ^[0-9]+$ ]]; then
        return 1 # failure
    fi
    return 0 #success
}
die() { echo "$*" 1>&2 ; exit 1; }ඊටත් වඩා සරලයි - භාවිතා කරන්න set -u
set -u යොමු කරන ලද සෑම විචල්යයක්ම එය භාවිතා කරන විට සකසා ඇති බවට වග බලා ගනී, එබැවින් එය සකසා අමතක කරන්න
myFunction() {
    set -u
    if [ "$1" -gt "-1" ]; then
        echo hi
    fi
}
[ -z "$1" ] && echo "No argument supplied"මම කැමතියි එක් ලයිනර්, ඒවා මට පහසු නිසා; භාවිතයට සාපේක්ෂව පිටවීමේ අගය පරීක්ෂා කිරීම ද වේගවත් යif