CS计算机代考程序代写 c/c++ file system CS246-F20-01-UnixShell

CS246-F20-01-UnixShell

Lecture 1.3

• Commands in bash
– type/which
– echo
– “Globbing” aka command-line pattern expansions

CS246

• Generally, if you execute a shell interactively, you are running
command-line programs with options and arguments (args
are often filenames)

• A command can be one of (in order or searching):
a) an alias (i.e., a simpler name) for built-in/external, possibly with pre-

supplied arguments, e.g., alias rm=’rm -iv’
b) built-in to the shell, e.g., echo, type
c) an external program, i.e., an executable file sitting on the file system,

e.g., g++, cp, rm, ls, mkdir, emacs, vim, nethack

Commands in the UNIX shell

Blue text means
a user typed this

Shell prompt: $ means bash, % means tcsh

$ cmd –opt1 –op2 arg1 –opt3 arg2 arg3 arg4

• Given this command:

– First, the shell first looks for an alias named cmd
– If none, then it looks for a shell built-in command named cmd
– If none, then it looks for external programs along the user’s PATH

named cmd

• There is a predefined shell variable called PATH that the shell
uses to search for external programs, in order. For example:
/usr/bin, /bin, /usr/local/bin, $HOME/bin etc.
– The value of PATH is typically set within the .bashrc file, which is

executed when the shell starts up

Commands in the UNIX shell

$ cmd –opt1 –op2 arg1 arg2 arg3

type / which

• Want to know what the command flurble means in your
current context?
– Is it an alias for “flurble –frobozz”?
– Is it built-in to the shell?
– Is it an executable file? If so, where?

• For tcsh / bash, “which flurble”
– For bash only, “type flurble” might give you a bit more info

$ pwd # Still inside an executing bash shell

/Users/migod/temp
$ ls
Hearts balloon balloon.cc oldStuff

$ which ls
/bin/ls
$ ls -F

Hearts@ balloon* balloon.cc oldStuff/
$ ls -F -G

Hearts@ balloon* balloon.cc oldStuff/
$ echo $PATH
/usr/local/bin:/Users/migod/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/loc
al/bin:/opt/X11/bin:/usr/X11/bin:/usr/texbin

$ tcsh # let’s start a subshell of tcsh

% which ls # I have an alias already set up
ls: aliased to ls-F

% which ls-F
ls-F: shell built-in command.
% ls

Hearts@ balloon* balloon.cc oldStuff/

$ echo no place like HOME
no place like HOME
$ echo ” no place like HOME” # quotes, space
no place like HOME

$ echo “no place like $HOME”
no place like /Users/migod
$ echo ‘no place like $HOME’
no place like $HOME
$ echo no place like $HOME
no place like /Users/migod

echo

• echo write arguments, separated by spaces and terminated
with newline
– It’s usually a very good idea to use double or single quotes to enclose

the message

• Generally, if you run a shell, you are running command-line programs:

• You can access the command line arguments programmatically using the
argv and argc parameters to the main function in a C/C++ program

• Globbing patterns apply only to args (often, file names), not commands or
options

• Note that the examples here assume bash; other shells may have slightly
different syntax or return different results if matching fails

Globbing:
Command-line pattern expansions

$ command –opt1 arg1 –op2 arg2 arg3

• Special chars for matching multiple files or constraining choices

• Suppose the current dir is /u/jfdoe/cs246/a1 which contains the files
q1x.C , q2y.h , q2y.cc , q3z.cpp

* matches 0 or more characters
? matches 1 character

Globbing

$ echo q* # “q*” matches filenames, echo prints ’em
q1x.C q2y.h q2y.cc q3z.cpp

$ echo q*.??
q2y.cc

{. . .} matches any alternative in the set
$ echo *.{C,cc,cpp}

q1x.C q2y.cc q3z.cpp

[. . .] matches 1 character in the set
$ echo q[12]*

q1x.C q2y.h q2y.cc

[!. . .] matches 1 character not in the set
$ echo q[!1]*

q2y.h q2y.cc q3z.cpp

Can create ranges using hyphen

[0-3] => 0 1 2 3
[a-zA-Z] => lower or upper case letter
[!a-zA-Z] => any character that is not a letter

Hyphen is escaped by putting it at start or end of set
[-?*]* # => matches file names starting with -, ?, or *

* doesn’t match dotfiles (for your own good!)
ls *fnord* will find xxfnordster but not .fnordster, if
they exist in the current dir

$ ls *.pdf *.txt

# will list all PDF and plain text files in the current dir

$ rm *.docx *.doc *.pptx *.ppt

# will remove all MS-Word and Powerpoint files (if any) in cur dir

$ cd /Users/migod/Music/iTunes/iTunesMusic/BiebersGold

$ ls *[Bb]ieber*.mp3
I-love-Justin-Beiber-fanSong.mp3

Bieber-SingsBruceSpringsteen-concert-full-3hours.mp3
lalalabieberlalala.mp3

• Globbing is turned off inside single and double quotes
– Single quotes: Everything up to next single quote is protected (incl. NL,

double quotes)
– Double quotes: Protect everything except doublequote, backquote,

and $VARs

% cd temp/
% ls
Hearts> balloon* balloon.cc oldStuff/
% echo My balloon* home is $HOME
My balloon balloon.cc home is /Users/migod
% echo My “balloon* home is $HOME”
My balloon* home is /Users/migod
% echo My ‘balloon* home is $HOME’
My balloon* home is $HOME

Globbing and quoting

End

CS246