Bash points.

Slides:



Advertisements
Similar presentations
ANGER MANAGEMENT. issue  This month’s issue features a special article about anger management. (1) 쟁점 (2) 호 (3) 발행.
Advertisements

Chapter 2. Text Patterns 2.1 ~ 2.3 서울시립대 전자전기컴퓨터공학과 데이터마이닝 연구실 G 노준호.
Term Project Hints Topics Keep-alive CGI Multi-thread Multi-process Event-based.
Apr. 25, 2013 Laboratory of Systems Medicine BASIC LINUX COMMANDS.
Tcl/Tk 민 인학 한국 Tcl/Tk 커뮤니티.
Classroom English How do you say _________ in Korean? _________ 는 한국어로 뭐예요 ?
Lesson 2 A Caring Friend. Making true friends is hard. Keeping them is even harder. To keep a good friendship, you need to care about others. Then, how.
Lesson 11 What’s Your Type? 여러분의 유형은 무엇인가요 ?. What job do you want to have in the future? 여러분은 미래에 어떤 직업을 갖고 싶은가 ? p.218.
이력서 작성법 서강대학교 전자공학과. 이력서 이력서란 ? ◦ 이력서 ( 履歷書 ) a rsum 《미》 ;a personal history[statement];a curriculum vitae 《라》 ;a record of one’s life ◦ 이력 [ 履歷 ] [ 명사.
쉘 스크립트와 cron coearth, george.
* 07/16/96 처음으로 배우는 C 프로그래밍 제1부 기초 제1장 시작하기 *.
C++ Tutorial 1 서강대학교 데이터베이스 연구실.
Project #2-2. Pintos User Program
Chapter 7 ARP and RARP.
제 1장 C 언어의 소개.
기본 컴퓨터 프로그래밍 Lecture #6.
C 프로그래밍 소개 숙명여대 창병모 2011 가을.
Unix(Linux) shell programming
LISTEN AND UNDERSTAND LISTEN AND SING
디렉토리 다루기 ㅎㅎ 유닉스 파일 시스템 현재 디렉토리 확인 : pwd 디렉토리 이동 : cd
Chapter 11 The C Shell.
Internet Control Message Protocol (ICMP)
제3장 유닉스 쉘.
 13장. 배시쉘 프로그래밍.
[beginning] Linux & vi editor
Linux/UNIX Programming
UNIX Unbounded A Beginning Approach
Ch2-2. VHDL Basic VHDL lexical element VHDL description
7장. 셸 스크립트 프로그래밍.
5. 네트워킹 사용자 표시 : users/ rusers/who/w users 지역 호스트 상에 있는 사용자의 간단한 목록 표시
파일 및 디렉토리(1) 여러 함수들 chdir(“category”) || die “cannot cd to temp”;
Internet Protocol and Programming
Perl File Handling FileHandle : Name for I/O connection
DataStage 운영자 지침서 Operator’s Guide
After You Read, Talk and Talk
제 2 장 변수와 상수.
Homework #5 (1/3) 다음을 수행한 후, 결과 파일들을 출력하여 제출한다.
계수와 응용 (Counting and Its Applications)
Open Class Lesson- L2B3 Greeting (5’ 00”) Word Like Daddy, Like Mommy
기본 셸로는 Bash 셸을 사용하라. 하지만 스트립트를 실행하기 위해서는 Bourne 셸을 사용하라.
듣기 퀴즈.
스케줄링 (Scheduling) 시스템 내부시간(time in the system): 스케줄링 문제
Chapter 2 Lexical Elements, Operators, and the C System
Write and say bye to friends,
제4장 유닉스 쉘 숙명여대 창병모 2011 가을.
성문영어구문 pattern 관계대명사의 생 략.
Talk and talk Could you…? 영어 7-b
Introduction to Programming Language
Internet Protocol and Programming
Regular Expression 1 Powerful pattern matching with regular expression to a string while () { if ( /ab*c/ ) { print $_; } } substitute operator s/abc*c/def/;
강변 교회 유초등부 설교. 강변 교회 유초등부 설교 강변 교회 유초등부 설교 이에 말씀하시되 내 마음이 매우 고민하여 죽게 되었으니 너희는 여기 머물러 나와 함께 깨어 있으라 하시고(마태복음 26:38) 이에 말씀하시되 내 마음이 매우 고민하여 죽게 되었으니.
6장 콘 셸 뇌를 자극하는 Solaris Bible.
루프와 카운트 Looping and counting
문자열 처리하기 working with Strings
U N I X 창원대학교 전자계산학과 김병찬.
Operating System Multiple Access Chatting Program using Multithread
Linux/UNIX Programming
Regular Expression 1 Powerful pattern matching with regular expression to a string while () { if ( /ab*c/ ) { print $_; } } substitute operator s/abc*c/def/;
Command line tools 한국어 정보의 전산 처리
제 6 강 Getting started.
이산수학(Discrete Mathematics)
시스템 인터페이스 Lab#5 쉡 실습.
스케줄링 (Scheduling) 시스템 내부시간(time in the system): 스케줄링 문제
1. 관계 데이터 모델 (1) 관계 데이터 모델 정의 ① 논리적인 데이터 모델에서 데이터간의 관계를 기본키(primary key) 와 이를 참조하는 외래키(foreign key)로 표현하는 데이터 모델 ② 개체 집합에 대한 속성 관계를 표현하기 위해 개체를 테이블(table)
Homework #5 (1/3) 다음을 수행한 후, 결과 파일들을 출력하여 제출한다.
Homework #3 (1/3) 다음을 수행한 후, 결과 파일들을 출력하여 제출한다.
Internet Protocol and Programming
4. 셸을 이용한 명령어 입력. Unix 시스템 쉘 간단한 셸 명령 명령 매개변수(Command arguments)
제4장 유닉스 쉘 숙명여대 창병모
Intelligent software Lab. 전재원
Presentation transcript:

bash points

변수 변수의 타입을 명시적으로 선언하지 않지만 문맥에 의해 각 변수는 세 가지 중 한 타입으로 작동한다. 문자열, 정수, 배열 변수에 저장되는 것은 기본적으로 문자열이다. 이 문자열이 숫자이면 int 타입으로 인식한다.

기본 첫 단어는 통상 명령어로 인식한다. 두 번째 이후 단어들은 인자로 인식한다. 이 때 빈 칸과 탭이 단어 구분자로 간주된다. 따옴표로 둘러 쌓인 문자열은 따옴표 안의 (빈칸과 탭을 포함한) 문자열 전체가 하나의 문자열로 간주된다.

대입 아래와 같은 표현을 만나면 변수에 값을 대입하는 문장으로 인식한다. var=x = 앞 뒤에는 공백이 없어야 한다. 아래와 같이 적으면 var가 명령어이고 =와 x는 명령어에 주어진 인자들이라고 간주한다. var = x

cp="computer programming" 변수 cp에 computer programming 이라는 하나의 문자열을 저장한다. 저장할 때 따옴표는 제외한다. echo $cp 우선 변수대치가 일어나 아래와 같은 명령이 된다. echo computer programming 첫 번째 단어는 명령어, 그 이후는 차례로 인자로 인식된다. echo는 인자들을 화면에 차례로 보여주는 명령어다. 보여줄 때 인자들 사이에는 공백문자를 하나씩 삽입한다. 출력은 아래와 같다. computer programming echo "$cp" computer programming Put double quotes around every parameter expansion!

test, [ ], [[ ]] test 는 [ 와 같은 것으로서 명령어이다. [ a = b ] a, =, b, ] are arguments for the test command. ] 는 [ 명령어에서 요구되는 마지막 인자이다. [[ ]] 는 키워드이다. [[ ]] 가 사용시 에러가 적으며 기능이 많으므로 권장된다. [[ abc = a* ]] # globbing 사용 가능 [[ abb =~ ab+ ]] # regular expression 사용 가능 $ [ a < b ] # [는 명령어, a는 인자, < b는 리디렉션으로 인식 -bash: b: No such file or directory $ [[ a < b ]] # OK

test [ the same [ a = b ] a, =, b, ] are arguments for the test command. $ myname='Greg Wooledge' yourname='Someone Else' $ [ $myname = $yourname ] -bash: [: too many arguments $ [ "$myname" = "$yourname" ] [[ is a key word. Teats arguments specially. $ [[ $me = $you ]] # Fine. Allow pattern matching at the right hand side. $ [[ $filename = *.png ]] && echo "$filename looks like a PNG file"

수식 $ unset a; a=4+5 $ echo $a 4+5 $ let a=4+5 9 let expr, ((expr))에서는 변수 앞에 $를 붙이지 않아도 된다. You may use spaces, parentheses and so forth, if you quote the expression: $ let a='(5+2)*3'

Operators such as ==, <, > and so on cause a comparison to be performed, inside an arithmetic evaluation. $ if (($a == 21)); then echo 'Blackjack!'; fi If the comparison is "true" (for example, 10 > 2 is true in arithmetic -- but not in strings!)

$ (( i=10 )); while (( i > 0 )) > do echo "$i empty cans of beer $ (( i=10 )); while (( i > 0 )) > do echo "$i empty cans of beer." > (( i-- )) > done $ for (( i=10; i > 0; i-- )) $ for i in {10..1}

$ echo "I am $LOGNAME" # 겹따옴표 I am lhunath $ echo 'I am $LOGNAME' # 홑따옴표 I am $LOGNAME $ # boo # 주석 $ echo An open\ \ \ space # \공백문자는 공백으로 An open space #취급되지 않는다. (escape!) $ echo "My computer is $(hostname)" # 명령어 대치 My computer is Lyndir $ echo boo > file # 리디렉션 $ echo $(( 5 + 5 )) # 수식 10 $ (( 5 > 0 )) && echo "Five is bigger than zero." # 조건부 실행 Five is bigger than zero.

types of commands builtins, executables, keywords, functions, aliases. Keywords are quite like builtins, but the main difference is that special parsing rules apply to them. ! esac select } case fi then [[ do for until ]] done function while   elif if time else in {

command 종류를 알려면 type 명령을 사용한다 command 종류를 알려면 type 명령을 사용한다. $type cd cd is a shell builtin $type ls ls 은/는 `ls --color=auto' 의 별칭 $type cat cat is hashed (/bin/cat) $

도움말 builtin 명령어의 사용법을 보려면 bash에게 help를 요청한다. $help cd | head -2 cd: cd [-L|[-P [-e]]] [dir] Change the shell working directory. executible 명령어 (외장명령어)의 사용법을 보려면 명령어를 실행시키면서 --help 옵션을 준다. $cat --help | head -2 사용법: cat [<옵션>]... [<파일>]... Concatenate FILE(s), or standard input, to standard output. $

Expansion means that the shell replaces the parameter by its content. also called substitution.

따옴표 내에서는 특수문자가 특수한 의미를 잃는다. 겹따옴표 내에 있는 홑따옴표는 그 특수한 의미를 잃는다 따옴표 내에서는 특수문자가 특수한 의미를 잃는다. 겹따옴표 내에 있는 홑따옴표는 그 특수한 의미를 잃는다. $ echo "'$USER', '$USERs', '${USER}s'" 'lhunath', '', 'lhunaths'

Pattern A pattern is a string with a special format designed to match filenames, or to check, classify or validate data strings. globs, regular expression Glob *: Matches any string, including the null string. ?: Matches any single character. [...]: Matches any one of the enclosed characters. $ ls a abc b c $ echo * a abc b c $ echo a* a abc echo a* is replaced by the statement echo a abc, which is then executed.

When a glob is used to match _filenames_, the. and When a glob is used to match _filenames_, the * and ? characters cannot match a slash (/) character. So, for instance, the glob */bin might match foo/bin but it cannot match /usr/local/bin.

filenames generated by a glob will not be split $ ls a b.txt # 전체가 하나의 파일 이름일 때 $ for file in `ls`; do rm "$file"; done rm: cannot remove `a': No such file or directory rm: cannot remove `b.txt': No such file or directory $ for file in *; do rm "$file"; done

$ filename="somefile. jpg" $ if [[ $filename = $ filename="somefile.jpg" $ if [[ $filename = *.jpg ]]; then use a variable to store your regex

command grouping command grouping { commands; } (Note: don't forget that you need a semicolon or newline before the closing curly brace!) cd "$appdir" || { echo "Please create the appdir and try again" >&2; exit 1; }

always avoid using ls $ files=$(ls) # BAD, BAD, BAD! $ files=($(ls)) # STILL BAD! $ files=(*) # Good!

$ echo "The first name is: ${names[0]}" $ echo "The second name is: ${names[1]}" $ names=("Bob" "Peter" "$USER" "Big Bad John") # 배열 $ for name in "${names[@]}"; do echo "$name"; done

$ names=("Bob" "Peter" "$USER" "Big Bad John") $ ( IFS=,; echo "Today's contestants are: ${names[*]}" ) # subshell Today's contestants are: Bob,Peter,lhunath,Big Bad John $ printf "%s\n" "${names[@]}" Bob Peter lhunath Big Bad John $ array=(a b c) $ echo ${#array[@]} 3

$ indexedArray=( "one" "two" ) $ declare -A associativeArray=( ["foo"]="bar" ["alpha"]="omega" ) $ index=0 key="foo" $ echo "${indexedArray[$index]}" one $ echo "${indexedArray[index]}" $ echo "${indexedArray[index + 1]}" two $ echo "${associativeArray[$key]}" bar $ echo "${associativeArray[key]}" $ echo "${associativeArray[key + 1]}"

Input And Output Inputs Command-line arguments Environment variables Files Anything else a File Descriptor can point to (pipes, terminals, sockets, etc.).

File Descriptor File Descriptor A numeric index referring to one of a process's open files. The way programs refer to files, or to other resources that work like files (such as pipes, devices, sockets, or terminals) Each command has at least three basic descriptors Standard Input (stdin): File Descriptor 0 Standard Output (stdout): File Descriptor 1 Standard Error (stderr): File Descriptor 2

use input redirection than cat pipe use input redirection than cat pipe! it is often best simply to have your application read from stdin

Here Document Heredocs are useful if you're trying to embed short blocks of multi-line data inside your script. stdin to a command. (Embedding larger blocks is bad practice) You should keep your logic (your code) and your input (your data) separated, preferably in different files.

The pipe operator creates a subshell environment for each command

Process Substitution $ diff -y <(head -n 1 .dictionary) <(tail -n 1 .dictionary) $ echo diff -y <(head -n 1 .dictionary) <(tail -n 1 .dictionary) diff -y /dev/fd/63 /dev/fd/62 They're perfect for common short commands like diff that need filenames for their input sources.

Subshells $ (cd /tmp || exit 1; date > timestamp) $ pwd /home/lhunath

Jobs jobs are implemented as "process groups",

DON'T EVER parse the output of ls DON'T EVER parse the output of ls! --> Bash tests DON'T EVER test or filter filenames with grep! --> Globbing Don't use cat to feed a single file's content to a filter --> Reditection