Shell 의 for 순환 요약

셸 에 있 는 for 순환 용법 이 많 습 니 다.계속 정리 하고 싶 었 습 니 다.오늘 인터넷 에서 for 순환 용법 에 관 한 정 리 를 보 았 는데 전면적 인 느낌 이 들 어서 연 구 를 하 러 왔 습 니 다.헤헤...
for((i=1;i<=10;i++));do echo $(expr $i \* 4);done
셸 에서 자주 사용 하 는 것 은 for i in$(seq 10)입 니 다.

for i in `ls`
for i in ${arr[@]}
for i in $* ; do
for File in /proc/sys/net/ipv4/confaccept_redirects:'
for File in /proc/sys/net/ipv4/conf/*/accept_redirects; do
echo $File
done
echo " "
for i in f1 f2 f3 ;do
echo $i
done
echo
echo "C for :"
for (( i=0; i<10; i++)); do
echo $i
done
---------------------------------------------------------------------------------------------------------
셸 에서 for 순환 용법
셸 문법 이 너무 귀 찮 습 니 다.한 순환 을 잠시 했 습 니 다.출력 1-100 칸 을 3 으로 나 눌 수 있 는 몇 가지 다른 방법 을 찾 았 습 니 다.
1.사용()

#!/bin/bash
clear
for((i=1;i<100;i++))
for
do
if((i%3==0))
then
echo $i
continue
fi
done
2.`seq 100`사용

#!/bin/bash
clear
for i in `seq 100`
do
if((i%3==0))
then
echo $i
continue
fi
done
3.while 사용

#!/bin/bash
clear
i=1
while(($i<100))
do
if(($i%3==0))
then
echo $i
fi
i=$(($i+1))
done
--------------------------------------------------------------------------------------------------------
셸 이 for 순환 으로 숫자 가 증가 할 때 문 제 를 발 견 했 습 니 다.셸 아래 for 순환 의 몇 가지 방법 을 보 여 줍 니 다.
1.

for i in `seq 1 1000000`;do
echo $i
done
seq 1 1000000 으로 증가 하기 전에 이런 방법 을 사용 할 때 문제 가 발생 하지 않 았 습 니 다.왜냐하면 예전 의 i 는 백만(1000000)을 전혀 사용 하지 않 았 기 때 문 입 니 다.프로젝트 는 저 라 는 숫자 가 백만 보다 훨씬 많 기 때 문 입 니 다.seq 수치 로 1000000 시 에 1e+06 으로 전환 하 는 것 을 발 견 했 습 니 다.숫자 로 다른 연산 을 할 수 없 거나$i 를 효과 적 이 고 정확하게 사용 하여 다른 방법 으로 해결 해 야 합 니 다.다음 과 같 습 니 다.
2.

for((i=1;i<10000000;i++));do
echo $i
done
3.
i=1
while(($i<10000000));do
echo $i
i=`expr $i + 1`
done
이 방법 은 expr 를 호출 하기 때문에 운행 속 도 는 1,2 종 보다 훨씬 느 리 지만 약간 개선 할 수 있 습 니 다.i='expr$i+1'을 i=$($i+1)로 바 꾸 면 속도 가 조금 올 라 갈 수 있 습 니 다.그러나 구체 적 으로 는 해당 셸 환경 이 지원 하 는 지 여 부 를 볼 수 있 습 니 다.
4.

for i in {1..10000000;do
echo $i
done
사실 어떤 방법 을 선택 하 는 지 구체 적 으로 해당 하 는 셸 환경의 지원 을 받 아 기대 하 는 효 과 를 얻 고 속도 적 인 문 제 를 고려 해 야 한다.
예시:

# !/bin/sh
i=1
function test_while(){
i=1
while [ $i ]
do
echo $i
i=`expr $i + 1`
if [ $i -ge 10 ]; then
break
fi
done
}
function test_for(){
i=1
for ((i=1; i<=100; i++)); do
echo $i
if [ $i -ge 10 ]; then
break
fi
done
}
function test_continue(){
i=1
for i in $(seq 100); do
if (( i==0 )); then
echo $i
continue
fi
done
}
echo "test_while..."
test_while
echo "test_for..."
test_for
echo "test_continue..."
test_continue
실행 결과:

test_while...
1
2
3
4
5
6
7
8
9
test_for...
1
2
3
4
5
6
7
8
9
10
test_continue...
10
20
30
40
50
60
70
80
90
100

좋은 웹페이지 즐겨찾기