하나의 변수가 두 번째 변수보다 작은 경우에만 bash에서 작업을 수행하세요.

하나의 변수가 두 번째 변수보다 작은 경우에만 bash에서 작업을 수행하세요.

저는 제가 만든 가상 머신을 위한 운영 체제를 구축하고 있습니다. 잘 진행되고 있지만 매우 간단한 문제에 대해 몇 시간 동안 고민하고 있습니다. 드롭다운할 수 있는 동안 디렉토리를 탐색하는 방법을 설계하고 있습니다. into subdirectories, 상위 디렉토리로 돌아가는 데 몇 가지 문제가 있습니다. 디렉토리의 문자 수가 특정 길이 이상인 경우에만 상위 디렉토리로의 복귀를 허용하는 bash 스크립트가 필요하므로 가상 머신의 파일 시스템 위에서 가상 머신의 호스트 FS 또는 시스템 디렉토리로의 탐색이 불가능합니다. allowed: 사용자 모드이지만 루트 모드에서는 둘 다 허용합니다(관리하기 위해 제대로 작동하는 두 번째 스크립트가 있습니다.).

그래서 지금까지 시도한 것은 다음과 같습니다. 문제는 두 스크립트가 모두 동일한 작업을 수행한다는 것입니다. 디렉토리를 탐색해도 사용자 모드로 돌아가는 대신 "파일 시스템 루트에 상위가 없습니다"가 반환됩니다. 일반 루트 디렉토리로 루트 .

#!/bin/bash
dir=$(cat '/system/framework/usr디렉토리')
상위 디렉터리 = "$(디렉터리 이름 "$dir")"
echo $parentdir > '/system/framework/parentToCheck'
validCheck=$(cat "/system/framework/parentToCheck")
유효=${#vaidCheck}
유효 길이=46
if [[ $valid == $validLength ]]
  그 다음에
      echo $parentdir > '/system/framework/usrDirectory'
  그렇지 않은 경우 [[ $valid < $validLength ]]
      그 다음에
          echo -e "\n\n파일 시스템의 루트 디렉터리에 상위 디렉터리가 없습니다!"
  필리핀 제도
필리핀 제도
또한:
#!/bin/bash
dir=$(cat '/system/framework/usr디렉토리')
상위 디렉터리 = "$(디렉터리 이름 "$dir")"
echo $parentdir > '/system/framework/parentToCheck'
validCheck=$(cat "/system/framework/parentToCheck")
유효=${#vaidCheck}
유효 길이=46
if [[ $valid == $validLength ]]
  그 다음에
      echo -e "\n\n파일 시스템의 루트 디렉터리에 상위 디렉터리가 없습니다!"
  기타
      echo $parentdir > '/system/framework/usrDirectory'
필리핀 제도

validLength참고: 예 , 변수 값이 46이고 해당 스크립트의 디렉터리 길이가 그다지 길지 않다고 나와 있습니다 . 이는 개인 VM이고 사용자 모드가 상위 액세스 디렉터리에 안전하게 잠기도록 설계되었기 때문입니다. 모든 내용, 기간. 따라서 여기서는 사용자 모드 루트 디렉터리의 전체 경로를 표시하고 싶지 않습니다. 그래도 사용자 모드 루트 디렉터리 경로에는 46자가 포함되어 있으므로 이것이 작동하지 않을 이유가 없습니다.

답변1

제목에 제시된 질문에 간단히 대답하려면 다음을 수행하십시오.

if [[ "$foo" -lt "$bar" ]]; then
    echo "$foo is less than $bar"
fi

정수 비교 테스트는 다음과 같습니다.

 n1 -eq n2     True if the integers n1 and n2 are algebraically equal.

 n1 -ne n2     True if the integers n1 and n2 are not algebraically equal.

 n1 -gt n2     True if the integer n1 is algebraically greater than the
               integer n2.

 n1 -ge n2     True if the integer n1 is algebraically greater than or
               equal to the integer n2.

 n1 -lt n2     True if the integer n1 is algebraically less than the inte-
               ger n2.

 n1 -le n2     True if the integer n1 is algebraically less than or equal
               to the integer n2.

예를 들어 ASCII 순서 비교에 <또는 를 사용하면 정확합니다.>[[ 0100 < 100 ]]

답변2

글쎄, 나는 오타를 수정했는데, 이는 확실히 프로그램을 깨뜨렸고, 연산자의 구문도 고쳤는데, 이로 인해 프로그램도 확실히 깨졌습니다. 그러나 (그리고 이것은 터무니없게 보일 수도 있습니다), 일단 이러한 문제를 수정한 후 valid=${#validCheck}만일을 대비해 문자열 길이를 테스트하는 작업을 수동으로 수행했고 디렉터리 길이가 실제로 46자가 아니라 45자라는 것을 발견했습니다. 지금은 꽤 똑똑하다고 생각하지만 문제가 해결되어 더 긴급한 기능으로 넘어갈 수 있어서 기쁘네요. 오타를 고쳐주셔서 감사하고, chroot Jail 도구를 제안해주신 Richard님께도 감사드립니다.

관련 정보