如何学习一门编程语言
-
数据类型
-
运算符
-
关键字
1 认识BASH 这个shell
linux是操作系统核心,用户通过shell与核心进行沟通,达到我们想要的目的。硬件、核心、用户之间的关系:
原理:所谓Shell程序,实际上是提供用户操作系统的一个接口,用户可以通过shell程序操作其他应用程序(eg. ls,chown,etc.),让这些应用程序可以呼叫内核来完成工作。Bash是Linux系统下的其中一种Shell程序。当前系统支持哪些Shell程序,可查看/etc/shells配置文件;查看用户配置使用的哪种shell,可查看/etc/passwd配置文件。
bash:The Bourne Again Shell。
shell:接口程序,是一个命令语言解释器,拥有内建的命令集。
1.1 为何要学文字接口的shell
- Shell操作方式一致,可一法通、万法通;
- 远程管理;
- 主机管理及shell编程;
1.2 bash shell的功能
//历史查看,在[~/.bash_history]中记录前一次登入以前所执行过的指令,本次执行会暂存在内存中,成功注销后,才会记录到bash_history当中。 history //命令补全功能:tab tab //命令别名,自定义设定别名,比如alias lm='ls -al' alias lm='ls -al' //通配符* ls -l /user/bin/X* //查看在/usr/bin底下有多少以X为开头的文件
1.3 bash shell的内建命令:type
//type内建命令,type [-tpa] name,选项与参数 -t:file表示为外部指令;alias 表示命令别名所设定的名称;builtin 表示bash内建的命令 -p:name为外部指令,才会显示完整文件名 -a:PATH变量定义路径中,将所有含name指令都列出来,包含alias eg: //查看一下pwd这个指令是否为bash内建,列出主要使用情况 [wendy@cs011 ~]$ type pwd //内建命令 pwd is a shell builtin [wendy@cs011 ~]$ type -a pwd pwd is a shell builtin pwd is /usr/bin/pwd [wendy@cs011 ~]$ type -t pwd //内建命令,列出执行时的情况 builtin [wendy@cs011 ~]$ type ls ls is aliased to `ls --color=auto` [wendy@cs011 ~]$ type -a ls ls is aliased to `ls --color=auto` //先使用alias ls is /usr/bin/ls //找到外部命令在bin/ls [wendy@cs011 ~]$ type -t ls //别名,列出执行时的情况 alias
2 shell的变量功能
变量:让某一个特定字符串代表不固定的内容。即变量就是以一组文字或符号等,来取代一些设定或者一串保留的数据。比如y=ax+b,y就是变量,ax+b是变量的内容。
取用变量:echo $变量名,比如:echo $PATH 或 echo ${PATH}
变量的有效范围:比如export后的变量,称为环境变量。环境变量可以被子程序所引用,但其他的自定义变量就不会存在于子程序中。全局变量 = 环境变量;自定义变数 = 局部变量
- 当启动一个shell,操作系统会分配一记忆区块给shell使用,内存内的变量可以让子程序取用。
- 父程序利用export功能,可以让自定义变量的内容写入到记忆区块中。
- 当加载另一个shell时,子shell可以将父shell的环境变量所在的记忆区块导入自己的环境变量区块中。
Bash的变量分为2种:环境变量(可分为系统级别或用户级别)、普通变量。
普通变量即用户自定义的变量,变量的设定规则如下:
- 1.变量与变量内容以一个等号=来连接,比如[ myname=VBird ]
- 2.等号两边不能有空格;
- 3.变量名称只能是英文字母与数字,且必须以英文字母开头;
- 4.变量获取使用,可以通过$var或者${var}读取2种写法;
- 5.变量内容若有空格符,可使用单引号或者双引号将变量内容结合在一起;
A.单/双引号的区别在于:双引号内的特殊字符如$, 反引号等,可以保留原本特性;而单引号内的特殊字符则仅作为一般字符(纯文本);
//双引号内的特殊字符如$等,可以保有原本的属性 [wendy@cs011 ~]$ var="lang is $LANG" [wendy@cs011 ~]$ echo $var lang is en_US.UTF-8 [wendy@cs011 ~]$ var='lang is $LANG' [wendy@cs011 ~]$ echo $var lang is $LANG
B.单/双引号使用规则是:
-
-
- 1)双引号之间可有成对双引号,也可有成对单引号,当内外均是双引号时,内部双引号之间不能有空格 ;
- 2)单引号之间可有成对双引号,也可有成对单引号,当内外均是单引号时,内部单引号之间不能有空格;
- 3)双引号内可有单个单引号不能有单个双引号,除非以转移字符转义内部双引号;
- 4)单引号内可有单个双引号,不能有单个单引号,即使转义内部单引号也不行;
-
- 6.可以用转义字符将特殊符号如ENTER, $, \, 空格等变成一般字符;
- 7.如果在一串指令中,还需要其他指令提供的信息,可以使用反单引号【ESC键正下方】或者$()来实现;
[wendy@cs011 ~]$ v=$(uname -r) [wendy@cs011 ~]$ echo $v 3.10.0-862.2.3.el7.x86_64 [wendy@cs011 ~]$ v1=`uname -r` //``这个是tab键上面的那个顿点 [wendy@cs011 ~]$ echo $v1 3.10.0-862.2.3.el7.x86_64
- 8.如果变量需要在其他子程序中使用,可以用export命令将其变成环境变量;
//该变量在其他子程序执行,需要用export来使变量变成环境变量 export PATH //变量为扩增变量,可用"$变量名称" 或${变量}累加内容 [wendy@cs011 develop]$ version=1 [wendy@cs011 develop]$ echo $version 1 [wendy@cs011 develop]$ version="$version":/第二个参数 [wendy@cs011 develop]$ echo $version 1:/第二个参数 [wendy@cs011 develop]$ version=$version:/第三个参数 [wendy@cs011 develop]$ echo $version 1:/第二个参数:/第三个参数 [wendy@cs011 develop]$ version=$version:/第四个参数 [wendy@cs011 develop]$ echo $version 1:/第二个参数:/第三个参数:/第四个参数
- 9.取消自定义变量命令unset;
- 10.交互获取变量命令read;
- 11.关于bash的补充说明:环境变量可理解为bash的全局变量,在用户取得bash时初始化并赋值。环境变量的初始化配置文件及读取顺序如下:
a.变量类型默认为“字符串”,可用declare申明变量类型
b.bash环境中的数值运算,预设的精度仅能达到整数形态;
- 12.环境变量查看命令env;环境变量及自定义变量查看命令set。
//列出目前的shell环境下的所有环境变量与其内容 env //set观察所有变量(含环境变量与自定义变量) set ps:env 与set 区别:该变量是否会被子程序所继续引用 //export:自定义变量转成环境变量,可以使用declare export //显示所有的环境变量
2.1 影响显示结果的语系变量(locale)
//locale -a :后面可以不加任何选项与参数 [wendy@cs011 ~]$ locale LANG=en_US.UTF-8 LC_CTYPE="en_US.UTF-8"
2.2 变量键盘读取、数组与宣告:read,array,declare
//read :读取来自键盘输入的变量。read [-pt] variable -p:后面可以接提示字符 -t:后面可以接等待的秒数 eg: [wendy@cs011 ~]$ read atest aaaa //等待输入,键盘输入内容 [wendy@cs011 ~]$ echo $atest aaaa [wendy@cs011 ~]$ read -p atest: atest:wendy [wendy@cs011 ~]$ echo $atest aaaa //declare/typeset:宣告变量的类型,declare [-aixr] variable -a:变量定义成为数组类型(array) -i:变量成为整数数字类型(integer) -x:export一样,变成为环境变量 -r:变量设定为readonly类型,该变量不能更改,也不能unset。需要注销在登入才能复原该变量类型 eg: [wendy@cs011 ~]$ declare -i sum=10+20 //-i 定义变量sum为integer [wendy@cs011 ~]$ echo $sum 30 [wendy@cs011 ~]$ declare -x sum //-x 定义变量sum为环境变量 [wendy@cs011 ~]$ export | grep sum declare -ix sum="30" [wendy@cs011 ~]$ declare -r sum //-r 定义变量sum为只读 [wendy@cs011 ~]$ sum=10+20+30 -bash: sum: readonly variable //让sum变成非环境变量的自定义变量 [wendy@cs011 ~]$ declare +x sum //+x 取消变量为自定义变量 [wendy@cs011 ~]$ declare -p sum declare -ir sum="30"
//数组变量类型 [wendy@cs011 ~]$ var[1]="small min" [wendy@cs011 ~]$ var[2]="big min" [wendy@cs011 ~]$ var[3]="nice min" [wendy@cs011 ~]$ echo "${var[1]},${var[2]},${var[3]}" small min,big min,nice min
3 命令别名与历史命令
//命令别名设定:alias, 别名='指令 选项....' alias lm='ls -al | more' //取消命令别名unalias unalias lm //history[n][-c] 或history [-raw] hisfiles n:数字 -c:将目前的shell中的所有history内容全部消除 -a:目前新增的history指令新增入histfiles,若没有加hisfiles,则预设写入~/.bash_history -r:将histfiles的内容读到目前这个shell的history记忆 -w:将目前的history记忆内容写入histfiles中 eg: [wendy@cs011 ~]$ history 3 999 alias 1000 clear 1001 history 3 [wendy@cs011 ~]$ history -w [wendy@cs011 ~]$ echo $HISTSIZE 1000 [wendy@cs011 ~]$ history 3 1002 history -w 1003 echo $HISTSIZE 1004 history 3
4 bash shell 的操作环境
4.1 路径与指令搜索顺序
- 1.以相对/绝对路径执行指令,例如[/bin/ls]或[./ls]
- 2.由alias找到该指令来执行
- 3.由bash内建的builtin指令来执行
- 4.透过$PATH这个变量的顺序搜寻到的第一个指令来执行
//指令执行顺序 [wendy@cs011 ~]$ alias echo='echo -n' [wendy@cs011 ~]$ type -a echo echo is aliased to `echo -n` echo is a shell builtin echo is /usr/bin/echo
4.2 bash的进站与欢迎讯息
// bash进站与欢迎讯息:/etc/issue、/etc/motd [wendy@cs011 ~]$ cat /etc/issue S Kernel on an m
4.3 环境配置文件
环境配置文件:login、non-login shell、/etc/profile、~/.bash_profile,source,~/.bashrc
//bash的环境配置文件:login、non-login shell、/etc/profile、~/.bash_profile,source,~/.bashrc //login shell读取的配置文件 1、/etc/profile:login shell才会读,这是系统整体的设定,最好不要修改这个档案 2、~/.bash_profile或~/.bash_login或~/.profile:属于使用者个人设定,你要改自己的数据,依次执行
login shell的配置文件读取流程:实现的方向是主线流程 ,虚线的方向则是被呼叫的配置文件。在centos的login shell环境下,最终被读取的配置文件是[~/.bashrc]这个文件。
//source:读入环境配置文件的指令,/etc/profile与~/.bash_profile都是在取得login shell的时候才会读取的配置文件。 //source 配置文件档名,利用source或小数点(.)都可以将配置文件的内容读进来目前的shell环境中。 eg://将home目录的~/.bashrc的设定读入目前的bash环境中,有如下2种方式。 [wendy@cs011 ~]$ source ~/.bashrc [wendy@cs011 ~]$ . ~/.bashrc //non-login shell情况下,bash配置文件仅会读~/.bashrc [wendy@cs011 ~]$ cat ~/.bashrc # .bashrc # Source global definitions //整体的环境设定 if [ -f /etc/bashrc ]; then . /etc/bashrc fi # Uncomment the following line if you don't like systemctl's auto-paging feature: # export SYSTEMD_PAGER= # User specific aliases and functions export NVM_DIR="$HOME/.nvm" [ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh" # This loads nvm [ -s "$NVM_DIR/bash_completion" ] && . "$NVM_DIR/bash_completion" # This loads nvm bash_completion
4.4 终端机的环境设定
//终端机的环境设定:stty,set 。可以在tty1~tty6这六个文字接口的终端机环境中登入。syyt [-a] -a :将目前所有的stty参数列出来 eg: [wendy@cs011 ~]$ stty -a speed 38400 baud; rows 43; columns 115; line = 0; intr = ^C; quit = ^; erase = ^H; kill = ^U; eof = ^D; eol = <undef>; eol2 = <undef>; swtch = <undef>; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R; werase = ^W; lnext = ^V; flush = ^O; min = 1; time = 0; -parenb -parodd -cmspar cs8 -hupcl -cstopb cread -clocal -crtscts -ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr icrnl ixon -ixoff -iuclc -ixany -imaxbel -iutf8 opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0 isig icanon iexten echo echoe echok -echonl -noflsh -xcase -tostop -echoprt echoctl echoke //set [-uvCHhmBx] -u:默认不启用,启用时,未设定变量时,会显示错误信息 -v:默认不启用,启用后,讯息被输出前,会先显示讯息的原始内容 -x:默认不启用,启用后,在指令被执行前,会显示指令内容 -h:默认启用,与历史命令有关 -H:默认启用,与历史命令有关 -m:默认启用,与工作管理有关 -B:默认启用,与刮号[]的作用有关 -C:默认不启用,若使用>等,则若文件存在时,该文件不会被覆盖 //$- :变量内容就是set的所有设定,bash预设是himBH [wendy@cs011 ~]$ echo $- himBH [wendy@cs011 ~]$ set -u [wendy@cs011 ~]$ echo $vbirding -bash: vbirding: unbound variable [wendy@cs011 ~]$ set -x ++ printf '