16_Shell 언어 - for 순환 요소 목록 의 생 성 법칙

for 순환 문장의 요소 목록 은 몇 가지 방식 으로 생 성 할 수 있 습 니 다.
 
a) 모든 요 소 를 하나씩 열거 하고 앞의 요소 목록 은 모두 이런 형식 을 사용한다.
 
b) 마스크 방식 을 채택 한다.모든 요 소 를 하나씩 열거 하 는 방식 은 소량의 요소 의 목록 에 만 적합 하 며, 요소 의 개수 가 많 으 면 이 방법 은 적용 되 지 않 습 니 다.
옮 겨 다 니 려 면/var 디 렉 터 리 에 있 는 모든 파일 을 판단 하고 파일 형식 을 판단 합 니 다. ls 를 사용 하면 /var 모든 파일 을 보고 모든 요 소 를 하나씩 열거 하 는 방식 은 번 거 로 울 수 있 습 니 다. 그러나 마스크 를 사용 하여 목록 을 만 들 면 작업 이 간단 합 니 다.
# nano show_files_type.sh
 
#! /bin/bash
# 
for File in /var/*; do
#     /var    c       ,    /var/c*
file $File
done
unset File

집행 결과
[root@localhost ~]# ./show_files_type.sh
/var/account: directory
/var/cache: directory
/var/crash: directory
/var/cvs: directory
/var/db: directory
/var/empty: directory
/var/games: directory
/var/gdm: sticky directory
/var/lib: directory
/var/local: directory
/var/lock: directory
/var/log: directory
/var/mail: symbolic link to `spool/mail'
/var/nis: directory
/var/opt: directory
/var/preserve: directory
/var/run: directory
/var/spool: directory
/var/tmp: sticky directory
/var/www: directory
/var/yp: directory

 
c) 명령 을 사용 하여 목록 을 생 성 합 니 다.
마스크 를 제외 하고 명령 을 사용 하여 목록 을 만 드 는 것 도 코드 를 간소화 하 는 효과 가 있다.또는 상기 예, "/var/*"목록 은 ls 를 사용 할 수 있 습 니 다. /var 명령 을 사용 하여 생 성 합 니 다. 명령 을 사용 하여 생 성 된 목록 은 반 따옴표 로 참조 해 야 합 니 다.
#!/bin/bash
#
for File in `ls /var`;do
file /var/$File
done
unset File

집행 결과
[root@localhost ~]# ./show_files_type.sh
/var/account: directory
/var/cache: directory
/var/crash: directory
/var/cvs: directory
/var/db: directory
/var/empty: directory
/var/games: directory
/var/gdm: sticky directory
/var/lib: directory
/var/local: directory
/var/lock: directory
/var/log: directory
/var/mail: symbolic link to `spool/mail'
/var/nis: directory
/var/opt: directory
/var/preserve: directory
/var/run: directory
/var/spool: directory
/var/tmp: sticky directory
/var/www: directory
/var/yp: directory

 
d) 디지털 시퀀스 를 생 성 하 는 방식 은 다음 과 같다.
 
① {부터 데 이 터 를... 종료 데이터}. 
예 를 들 어 1 ~ 100 개의 숫자 를 만 드 는 요소 목록 을 만 들 려 면 {1. 100} 이 라 고 쓸 수 있 습 니 다.
 
② seq 명령 을 사용 합 니 다.사용 man seq 는 seq 의 용법 을 볼 수 있 습 니 다:
       
seq [OPTION]... LAST  #      
       seq [OPTION]... FIRST LAST        #         
       seq [OPTION]... FIRST INCREMENT LAST
      #         ,            

예 를 들 어 각각 1 - 6, 3 - 6, 3 에서 16 을 표시 하고 매번 간격 2
집행 결과
[root@localhost ~]# man seq
[root@localhost ~]# seq 6
1
2
3
4
5
6
[root@localhost ~]# seq 3 6
3
4
5
6
[root@localhost ~]# seq 3 2 16
3
5
7
9
11
13
15

그래서 요소 목록 에서 사용 할 수 있 습 니 다. `seq [시작 숫자] [보폭] [끝 숫자] ' 의 형식 으로 생 성 된다.
 
다음 예 를 들 어 요소 목록 의 생 성 을 소개 합 니 다.
for 순환 을 사용 하여 모든 사용자 의 사용자 이름과 셸 을 꺼 내 려 면 다음 과 같은 형식 을 사용 할 수 있 습 니 다.
  # nano user_shell.sh
 
#!/bin/bash
#
LINES=`wc -l /etc/passwd | cut -d' ' -f1`
#     LINES           ,  wc -l        ,   
#  cut       ,   
for I in `seq 1 $LINES`;do
#   I 1  , LINES    
head -$I /etc/passwd | tail -1 | cut -d: -f1,7
#   head     I  ,         tail  ,
#  tail         ,    I  ,          cut  ,
#  cut   “:”    ,         1、 7  
done
unset I
unset LINES

 
집행 결과
[root@localhost ~]# nano user_shell.sh
[root@localhost ~]# chmod +x user_shell.sh
[root@localhost ~]# ./user_shell.sh
root:/bin/bash
bin:/sbin/nologin
daemon:/sbin/nologin
adm:/sbin/nologin
lp:/sbin/nologin
sync:/bin/sync
shutdown:/sbin/shutdown
halt:/sbin/halt
mail:/sbin/nologin
uucp:/sbin/nologin
operator:/sbin/nologin
games:/sbin/nologin
gopher:/sbin/nologin
ftp:/sbin/nologin
nobody:/sbin/nologin
dbus:/sbin/nologin
usbmuxd:/sbin/nologin
vcsa:/sbin/nologin
rpc:/sbin/nologin
rtkit:/sbin/nologin
avahi-autoipd:/sbin/nologin
abrt:/sbin/nologin
rpcuser:/sbin/nologin
nfsnobody:/sbin/nologin
haldaemon:/sbin/nologin
gdm:/sbin/nologin
ntp:/sbin/nologin
apache:/sbin/nologin
saslauth:/sbin/nologin
postfix:/sbin/nologin
pulse:/sbin/nologin
sshd:/sbin/nologin
tcpdump:/sbin/nologin
centos:/bin/bash
hbase:/bin/bash
openstack:/bin/bash
hadoop:/bin/bash
ubuntu:/bin/bash
debian:/bin/bash
gentoo:/bin/bash
slackware:/bin/bash
archlinux:/bin/bash
sysuser:/bin/bash
sysuser1:/bin/bash
bsd:/bin/csh
moregrp:/bin/bash
redis:/bin/bash
mandriva:/bin/bash
fedora:/bin/csh
suse:/bin/dash
tom:/bin/bash
nologin:/sbin/nologin
mysql:/sbin/nologin
user2:/bin/bash
user3:/bin/bash
userA:/bin/bash
userB:/bin/bash
userC:/bin/bash

좋은 웹페이지 즐겨찾기