read

사용자 입력 받기
std::cin, scanf와 같이 사용자와 상호작용하기 위한 read 명령을 제공한다.

read는 표준 입력(STDIN) 또는 다른 파일 디스크립터에서 하나의 입력을 받아들인다
#!/bin/bash
echo -n "Enter your name: "
read name
echo "Hello $name, welcome to my program."
read -p
read -p 옵션을 사용해서 출력을 처리하고 입력을 받을 수 있다.
read -p "Enter your name: " name
여러개의 변수에 할당하여 변수를 저장할 수 있으며,
만약 변수 목록이 부족하면 나머지 데이터는 마지막 변수에 할당된다.

read에 특정한 변수가 지정되지 않은 경우,
$REPLY 환경변수에 모든 입력받은 데이터가 저장되어 있기 때문에 이를 이용할 수 있다.
read -t
read -t 옵션을 이용해서 입력을 기다리는 시간(타이머)를 지정할 수 있다.
read -t 5 -p "Please enter your name in 5 sec: " name
타이머가 만료되어 종료된 read 명령은 0이 아닌 값을 종료 상태로 돌려준다.

c_cc[VTIME]=#
#!/bin/bash
if read -t 5 -p "Please enter your name: " name; then
echo "Hello $name, welcome to my script"
else
echo
echo "Sorry, too slow!"
fi
read -n#
입력받는 글자 수를 세도록 설정할 수 있다.
미리 정해진 숫자의 문자가 입력되면 입력은 자동으로 종료되며 입력된 데이터는 변수에 저장

non Canonical mode
c_lflag &= ~ICANON
c_cc[VMIN]=#
#!/bin/bash
read -n1 -p "Do you want to continue [Y/N]? " answer
case $answer in
T | y)
echo
echo "fine, continue on...";;
F | f)
echo
echo "OK. goodbye"
exit;;
esac
echo "This is the end of the script"
read -s
화면에 출력을 표시하지 않고 읽기

non Echo Mode
c_lflag &= ~ECHO
c_lflag |= ECHOE

read -s 옵션은 실제로 입력을 echo는 하지만, 배경색과 글씨를 동일하게 만들어서 안보이게 하는 것임(? 최근에는 수정된듯)
read -s -p "Enter your passwd: " pass
파일에서 데이터 읽기
read 명령을 이요해서 파일에서 텍스트를 한 줄씩 읽어 들인다.
더 이상 읽을 파일의 줄이 남아 있지 않은 경우 0이 아닌 종료 상태와 함께 종료
cat "*.txt" | while read line
cat을 통한 출력을 파이프를 통해 read 명령을 가진 while 명령에 전달한다.
#!/bin/bash
count=1
cat test.txt | while read line; do
echo "Line $count: $line"
count=$[ $count + 1 ]
done
echo "Finished processing the file"