分享
 
 
 

认识与学习shell

王朝学院·作者佚名  2016-08-27
窄屏简体版  字體: |||超大  

linux的终端机执行命令的方式,是通过bash环境来处理的。bash包括变量的设置与使用,、bash操作环境的构建、数据流重定向的功能。下面的知识,对主机的维护与管理有重要的帮助。

管理整个计算机硬件的其实是操作系统的内核,这个内核被保护,一般用户只能通过shell来和内核通信(shell将输入的命令与内核通信,内核可以控制硬件来正确无误地工作)。man、chmod、chown、vi、mkfs等命令,都是独立的应用程序,我们可以通过shell(即命令行模式)来操作这些应用程序,让这些应用程序调用内核来运行所需的工作。

bash shell 的内置命令:type

type命令找出可执行文件,而不是一般文件名。

floralin@Ubuntu:~/Desktop/linux_study$typels# 未加任何参数的时候,列出ls的最主要使用情况lsis aliased to `ls--color=auto'floralin@ubuntu:~/Desktop/linux_study$ type -tls # 添加参数-t列出ls执行时的依据alias

floralin@ubuntu:~/Desktop/linux_study$ type -als # 添加参数-a会从PATH变量定义中,将所有含有 ls 的命令都列出来,包含aliaslsis aliased to `ls--color=auto'lsis /bin/lsfloralin@ubuntu:~/Desktop/linux_study$ type cd

cd is a shell builtin # cd是shell内置命令

命令的执行

很多时候输入命令过长,会在换行之前加入\,这样做的目的是为了将换行符[enter]转移过来。成功转移过后,下一行最前面就会出现>的符号,可以继续输入命令。

shell 变量功能

变量就是用一个特定字符串代表不固定的内容。在linux中要将变量的内容显示出来,可以使用echo这个命令来显示变量,但是变量在被显示时,必须加上$.

floralin@ubuntu:~/Desktop/linux_study$echo$variable

floralin@ubuntu:~/Desktop/linux_study$echo$PATH/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games

设置变量

floralin@ubuntu:~/Desktop/linux_study$echo$myname

floralin@ubuntu:~/Desktop/linux_study$ myname=flora

floralin@ubuntu:~/Desktop/linux_study$echo$myname

flora

保留原先变量,然后进行设置

floralin@ubuntu:~/Desktop/linux_study$ myname="$myname lin"floralin@ubuntu:~/Desktop/linux_study$echo$myname

flora lin

在执行过程中,反单引号(`),之内的命令会被先执行,而执行出来的结果将作为外部的输入信息。locate命令可以列出所有的相关文件名,但是如果我们想知道每个crontab相关文件名的权限:

floralin@ubuntu:~/Desktop/linux_study$ls-l `locatecrontab`-rw-r--r--1root root401Feb192014/etc/anacrontab-rw-r--r--1root root722Feb82013/etc/crontab-rwxr-sr-x1root crontab34824Feb82013/usr/bin/crontab-rw-r--r--1root root1184APR72014/usr/share/bash-completion/completions/crontab-rw-r--r--1root root27684Feb82013/usr/share/doc/cron/examples/crontab2english.pl-rw-r--r--1root root2521Feb82013/usr/share/man/man1/crontab.1.gz-rw-r--r--1root root892Feb192014/usr/share/man/man5/anacrontab.5.gz-rw-r--r--1root root5687Feb82013/usr/share/man/man5/crontab.5.gz

先以locate将文件名数据列出来,然后使用ls命令来处理。

环境变量的功能

环境变量能够帮我们达到很多功能,包括主文件夹的变换,提示符的显示,执行文件查找的路径等。

查看默认的环境变量:

floralin@ubuntu:~/Desktop/linux_study$env

#......

_=/usr/bin/env # 上一次使用的命令的最后一个参数(或命令本身)

随机数

RANDOM变量的内容介于0~32767之间,所以要进行数值计算才能获取一个一位数。

floralin@ubuntu:~/Desktop/linux_study$ declare -i number=$RANDOM*10/32768;echo$number1floralin@ubuntu:~/Desktop/linux_study$ declare -i number=$RANDOM*10/32768;echo$number4floralin@ubuntu:~/Desktop/linux_study$ declare -i number=$RANDOM*10/32768;echo$number5

set查看所有变量(含环境变量与自定义变量)

bash不只有环境变量,还有一些比较重要的参数,以及用户自己定义的变量。

floralin@ubuntu:~/Desktop/linux_study$ set

PS1命令提示符

每当我们按下回车键去执行某个命令后,最后要再次出现提示符,会去主动读取这个变量值。

floralin@ubuntu:~/Desktop/linux_study$ cd /home

floralin@ubuntu:/home$ PS1='[\u@\h \w \A #\#]\$'[floralin@ubuntu/home08:48#46]$lsfloralin

[floralin@ubuntu/home08:51#47]$

\w 代表完整的工作目录名称,由更目录写起来的目录名称。但是主文件夹将会用~替代。

\A 显示时间,二十四小时格式“HH:MM”。

\# 执行第几个命令。

\$ 提示符,如果是root时,提示符为#,否则为$。

变量键盘读取、数组与声明:read、array、declare

read读取来自键盘输入的变量

[floralin@ubuntu /home09:12#54]$read atest

This is a test

[floralin@ubuntu/home09:12#55]$read -p"Please keyin your name:"-t30named

Please keyin your name: floralin

[floralin@ubuntu/home09:13#56]$echo$named

floralin

30秒没有任何操作时,该命令会自动略过。

declare或typeset,声明变量的类型

如果使用declare后面没有接任何参数,bash就会主动将变量名称数出来。

[floralin@ubuntu /home09:21#59]$sum=100+300+50[floralin@ubuntu/home09:22#60]$declare -isum=100+300+50[floralin@ubuntu/home09:22#61]$echo$sum450

变量类型默认为字符串,所以不能制定变量类型,则1+2为一个字符串而不是计算式,因此执行第一条命令会直接输出100+300+50.。

将sum变成环境变量:

[floralin@ubuntu /home09:13#57]$declare -xsum[floralin@ubuntu/home09:21#58]$export |grepsumdeclare-xsum

将sum变成只读属性,不可修改:

[floralin@ubuntu /home09:25#62]$declare -rsum[floralin@ubuntu/home09:29#63]$sum=testgting

bash:sum: readonly variable

让sum变成非环境变量的自定义变量:

[floralin@ubuntu /home09:29#64]$declare +xsum[floralin@ubuntu/home09:30#65]$declare -psumdeclare-irsum="450"

数组变量类型

[floralin@ubuntu /home09:30#66]$var[1]="small min"[floralin@ubuntu/home09:32#67]$var[2]="big min"[floralin@ubuntu/home09:32#68]$var[3]="nice min"[floralin@ubuntu/home09:32#69]$echo"${var[1]},${var[2]},${var[3]}"small min,big min,nicemin

与文件系统及程序的限制关系ulimit

列出你目前身份的所有限制数据数值:

[floralin@ubuntu /home09:33#70]$ulimit -a

限制用户仅能建立10MB一下的容量文件:

[floralin@ubuntu /home09:38#74]$ulimit -f10240[floralin@ubuntu/home09:38#75]$ulimit -a

尝试创建20M的文件:

[floralin@ubuntu ~/Desktop/linux_study09:41#81]$sudoddif=~/Desktop/linux_study/ of=123bs=1M count=20

[floralin@ubuntu ~/Desktop/linux_study 09:41 #82]$ll

total 8

drwxrwxr-x 2 floralin floralin 4096 Oct 30 09:41 ./

drwxr-xr-x 3 floralin floralin 4096 Oct 30 07:43 ../

-rw-r--r-- 1 root root 0 Oct 30 09:41 123

变量内容的删除、替换与替代

变量内容的删除与替换

将local这两个目录删除掉:

[floralin@ubuntu ~/Desktop/linux_study09:47#85]$echo$path/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games

[floralin@ubuntu ~/Desktop/linux_study 09:49 #89]$echo ${path#/*local/bin:}

/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games

将sbin替换为SBIN:

floralin@ubuntu ~/Desktop/linux_study13:06#95]$echo${path/sbin/SBIN}/usr/local/SBIN:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games

[floralin@ubuntu~/Desktop/linux_study13:06#96]$echo${path//sbin/SBIN}/usr/local/SBIN:/usr/local/bin:/usr/SBIN:/usr/bin:/SBIN:/bin:/usr/games:/usr/local/games

变量的测试与内容替换:

[floralin@ubuntu ~/Desktop/linux_study13:07#97]$echo$username

# username可能不存在或者为空字符串

[floralin@ubuntu~/Desktop/linux_study13:09#98]$username=${username-root}

[floralin@ubuntu~/Desktop/linux_study13:10#99]$echo$username

root # 没有设置,所以主动给予名为root的内容

[floralin@ubuntu~/Desktop/linux_study13:10#100]$username="floralin"[floralin@ubuntu~/Desktop/linux_study13:10#101]$username=${username-root}

[floralin@ubuntu~/Desktop/linux_study13:10#102]$echo$username

floralin

username-root 就得变量,被测试的选项 ; username-root变量的内容,在本范例中,这个部分是在给予未设置变量的内容。当然 username:-root则是在变量内容为空或者是未设置,都能够以后面的内容替换。

如果旧变量不存在,我们就以新变量内容替换;但是若旧变量存在,则新变量内容以旧变量替换。

[floralin@ubuntu ~/Desktop/linux_study13:10#103]$unset str; var=${str-newvar}

[floralin@ubuntu~/Desktop/linux_study13:18#104]$echovar="$var",str="$str"var=newvar,str=# 因为str不存在,所以var为newvar[floralin@ubuntu~/Desktop/linux_study13:19#105]$str="oldvar";var=${str-newvar}

[floralin@ubuntu~/Desktop/linux_study13:20#106]$echovar="$var",str="$str"var=oldvar,str=oldvar # 因为str存在,所以var等于str的内容

关于减号是不会影响旧变量的,如果想要旧变量内容也一起替换掉的话,就需要使用等号=:

[floralin@ubuntu ~/Desktop/linux_study13:20#107]$unset str; var=${str=newvar}

[floralin@ubuntu~/Desktop/linux_study13:25#108]$echovar="$var",str="$str"var=newvar,str=newvar[floralin@ubuntu~/Desktop/linux_study13:25#111]$str="oldvar";var=${str=newvar}

[floralin@ubuntu~/Desktop/linux_study13:25#112]$echovar="$var",str="$str"var=oldvar,str=oldvar

命令别名和历史命令

命令别名设置alias和unalias

命令别名可以使常用的但是特别长的命令修改成比较简洁的命令,还有增设默认的选项在一些惯用的命令上面,可以预防一些不小心误删文件的情况发生。例如,查询隐藏文件,并且需要长的列出与一页一页翻看,那么需要执行“ls -l | more”,可以使用以下命令将其简化为lm:

[floralin@ubuntu ~13:35#120]$alias lm="ls -l | more"

另外,命名别名的设置还可以替代既有的命令,例如,当以root登录,使用rm命令可以删除所有文件,因此要特别小心,rm提供一个参数让我们确认是否删除该文件-i:

[floralin@ubuntu ~13:35#123]$aliasrm="rm -i"[floralin@ubuntu~/Desktop/linux_study13:39#127]$rm123rm: removewrite-protected regular emptyfile‘123’? y

去掉刚才的命名别名:

[floralin@ubuntu ~/Desktop/linux_study13:39#128]$unaliasrm

历史命令 history

查询曾经执行过的命令,最近4条:

[floralin@ubuntu ~/Desktop/linux_study13:42#131]$history4

Bash Shell的操作环境

路径与命令查找顺序

设置echo的别名为echo-n,然后再查看echo执行的顺序:

[floralin@ubuntu ~/Desktop/linux_study13:45#132]$aliasecho="echo -n"[floralin@ubuntu~/Desktop/linux_study13:47#134]$type -aechoechois aliased to `echo-n'echois a shell builtinechois /bin/echo

bash的登录与欢迎信息:/etc/issue,/etc/motd

终端环境设置:stty.set

如何查阅目前的一些按键内容呢?可以利用stty(setting tty终端机),stty可以帮助设置终端机的输入按钮代表意义。我们可以利用stty-a来列出目前环境中的所有按键列表。

floralin@ubuntu:~$ stty -a

speed38400baud; rows37; columns80; line =0;

intr= ^C; quit = ^\; erase = ^?;kill= ^U; eof = ^D; eol = M-^?; eol2 = M-^?;

swtch= M-^?;start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R; werase = ^W;

lnext= ^V; flush = ^O; min =1;time=0;-parenb -parodd 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 iextenechoechoe echok -echonl -noflsh -xcase -tostop -echoprt

echoctl echoke

如果想要stty进行相关的字符删除:

floralin@ubuntu:~$ stty erase ^h

除了stty之外,其实我们bash还有自己的一些终端机设置值set。

管道命令pipe

使用bash命令执行输出数据,要经过几道数据之后才能得到我们想要的格式,这就需要使用管道。

管道命使用的是“|”这个界定符号。另外管道命令与“连续执行命令”不同。

查阅/etc/下面有多少文件,可以利用ls/etc来查阅,使用lese管道,可以使得原本很长的目录具备翻页能力:

floralin@ubuntu:~$ls-al /etc |less

选取命令:cut/grep

cut可以使一段信息切出来,处理的信息是以“行”为单位

截取第五行字符串:

floralinfloralin@ubuntu:~$echo$PATH |cut-d':'-f5

截取第三和五行:

floralinfloralin@ubuntu:~$echo$PATH |cut-d':'-f3,5

cut的主要用途是将同一行里面的数据进行分解,最常用使用在分析一些数据或文字数据的时候。这是因为有时候我们会将某些字符串作为切割的参数,然后来将数据加以切割,以取得我们所需要的数据。

grep则是分析一行信息。也就是,grep可以解析一行文字,取得关键字,若该行存在关键字,就会整行列出来。

列出含有“boot”关键字的行:

floralinfloralin@ubuntu:~$last|grep"boot"

列出不含有“boot”关键字的行:

floralinfloralin@ubuntu:~$last|grep-v"boot"

加上cut,取得第一列:

floralinfloralin@ubuntu:~$last|grep"boot"|cut-d""-f1

取得/etc/man.config 内含MANPATH的那几行:

floralinfloralin@ubuntu:~$grep--color=auto ‘MANPATH’ /etc/main.config

排序命令:sort、wc、uniq

对/etc/insserv.conf文件进行排序显示:

floralinfloralin@ubuntu:~$ /etc/insserv.conf |sort

对于排序完成的数据,想要将重复的数据仅列出一个显示:

floralinfloralin@ubuntu:~$last|cut-d''-f1 |sort|uniq

还想知道登录状态:

双向重定向:tee

将数据流整个传送给文件或设备。tee会同时将数据流送与文件与屏幕;而输出到屏幕的,其实就是stdout。

将last的输出存一份给last.list文件中:

floralinfloralin@ubuntu:~$last|teelast.list

将ls的数据存一份到 ~/homefike | more:

floralinfloralin@ubuntu:~$ls-l /home |tee~/homefile |more

tee后面的文件会被覆盖,若加上-a这个参数,则能将信息累加:

floralinfloralin@ubuntu:~$ls-l /home |tee-a ~/homefile |more

字符串转换命令:tr、col、join、paste、expand

tr可以用来删除一段信息当中的文字,或者是进行文字信息的替换。

col可以进行简单处理,经常被用于man page转存为纯文本文件以方便查阅的功能。

join看字面上的意义,是处理两个文件之间的数据。要将两个文件当中相同数据的那一行加起来。

paste将两行贴在一起,中间一tab键隔开。

expand将tab按键转成空格键。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有