Linux Shell 认识与学习

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

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

bash shell 的内置命令:type

type命令找出可执行文件,而不是一般文件名。linuxidc@Ubuntu:~/Desktop/linux_study$ type ls # 未加任何参数的时候,列出ls的最主要使用情况ls is aliased to `ls –color=auto’linuxidc@ubuntu:~/Desktop/linux_study$ type -t ls # 添加参数-t列出ls执行时的依据aliaslinuxidc@ubuntu:~/Desktop/linux_study$ type -a ls # 添加参数-a会从PATH变量定义中,将所有含有 ls 的命令都列出来,包含aliasls is aliased to `ls –color=auto’ls is /bin/lslinuxidc@ubuntu:~/Desktop/linux_study$ type cdcd is a shell builtin # cd是shell内置命令

命令的执行

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

shell 变量功能

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

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

设置变量linuxidc@ubuntu:~/Desktop/linux_study$ echo $myname

linuxidc@ubuntu:~/Desktop/linux_study$ myname=floralinuxidc@ubuntu:~/Desktop/linux_study$ echo $mynameflora

保留原先变量,然后进行设置linuxidc@ubuntu:~/Desktop/linux_study$ myname=”$myname lin”linuxidc@ubuntu:~/Desktop/linux_study$ echo $mynameflora lin

在执行过程中, 反单引号(`) ,之内的命令会被先执行,而执行出来的结果将作为外部的输入信息。locate命令可以列出所有的相关文件名,但是如果我们想知道每个crontab相关文件名的权限: linuxidc@ubuntu:~/Desktop/linux_study$ ls -l `locate crontab`-rw-r–r– 1 root root 401 Feb 19 2014 /etc/anacrontab-rw-r–r– 1 root root 722 Feb 8 2013 /etc/crontab-rwxr-sr-x 1 root crontab 34824 Feb 8 2013 /usr/bin/crontab-rw-r–r– 1 root root 1184 Apr 7 2014 /usr/share/bash-completion/completions/crontab-rw-r–r– 1 root root 27684 Feb 8 2013 /usr/share/doc/cron/examples/crontab2english.pl-rw-r–r– 1 root root 2521 Feb 8 2013 /usr/share/man/man1/crontab.1.gz-rw-r–r– 1 root root 892 Feb 19 2014 /usr/share/man/man5/anacrontab.5.gz-rw-r–r– 1 root root 5687 Feb 8 2013 /usr/share/man/man5/crontab.5.gz

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

环境变量的功能

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

查看默认的环境变量:linuxidc@ubuntu:~/Desktop/linux_study$ env#……_=/usr/bin/env # 上一次使用的命令的最后一个参数(或命令本身)

随机数

RANDOM变量的内容介于0~32767之间,所以要进行数值计算才能获取一个一位数。linuxidc@ubuntu:~/Desktop/linux_study$ declare -i number=$RANDOM*10/32768;echo $number1linuxidc@ubuntu:~/Desktop/linux_study$ declare -i number=$RANDOM*10/32768;echo $number4linuxidc@ubuntu:~/Desktop/linux_study$ declare -i number=$RANDOM*10/32768;echo $number5

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

bash不只有环境变量,还有一些比较重要的参数,以及用户自己定义的变量。linuxidc@ubuntu:~/Desktop/linux_study$ set

PS1命令提示符

每当我们按下回车键去执行某个命令后,最后要再次出现提示符,会去主动读取这个变量值。linuxidc@ubuntu:~/Desktop/linux_study$ cd /homelinuxidc@ubuntu:/home$ PS1='[\u@\h \w \A #\#]\$'[linuxidc@ubuntu /home 08:48 #46]$lslinuxidc[linuxidc@ubuntu /home 08:51 #47]$

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

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

\# 执行第几个命令。

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

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

read读取来自键盘输入的变量[linuxidc@ubuntu /home 09:12 #54]$read atestThis is a test[linuxidc@ubuntu /home 09:12 #55]$read -p “Please keyin your name: ” -t 30 namedPlease keyin your name: linuxidc[linuxidc@ubuntu /home 09:13 #56]$echo $namedlinuxidc

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

declare或typeset,声明变量的类型

如果使用declare后面没有接任何参数,bash就会主动将变量名称数出来。[linuxidc@ubuntu /home 09:21 #59]$sum=100+300+50[linuxidc@ubuntu /home 09:22 #60]$declare -i sum=100+300+50[linuxidc@ubuntu /home 09:22 #61]$echo $sum450

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

将sum变成环境变量:[linuxidc@ubuntu /home 09:13 #57]$declare -x sum[linuxidc@ubuntu /home 09:21 #58]$export | grep sumdeclare -x sum

将sum变成只读属性,不可修改:[linuxidc@ubuntu /home 09:25 #62]$declare -r sum[linuxidc@ubuntu /home 09:29 #63]$sum=testgtingbash: sum: readonly variable

让sum变成非环境变量的自定义变量:[linuxidc@ubuntu /home 09:29 #64]$declare +x sum[linuxidc@ubuntu /home 09:30 #65]$declare -p sumdeclare -ir sum=”450″

数组变量类型[linuxidc@ubuntu /home 09:30 #66]$var[1]=”small min”[linuxidc@ubuntu /home 09:32 #67]$var[2]=”big min”[linuxidc@ubuntu /home 09:32 #68]$var[3]=”nice min”[linuxidc@ubuntu /home 09:32 #69]$echo “${var[1]},${var[2]},${var[3]}”small min,big min,nice min

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

列出你目前身份的所有限制数据数值:[linuxidc@ubuntu /home 09:33 #70]$ulimit -a

限制用户仅能建立10MB一下的容量文件:[linuxidc@ubuntu /home 09:38 #74]$ulimit -f 10240[linuxidc@ubuntu /home 09:38 #75]$ulimit -a

尝试创建20M的文件:[linuxidc@ubuntu ~/Desktop/linux_study 09:41 #81]$sudo dd if=~/Desktop/linux_study/ of=123 bs=1M count=20

[linuxidc@ubuntu ~/Desktop/linux_study 09:41 #82]$lltotal 8drwxrwxr-x 2 linuxidc linuxidc 4096 Oct 30 09:41 ./drwxr-xr-x 3 linuxidc linuxidc 4096 Oct 30 07:43 ../-rw-r–r– 1 root root 0 Oct 30 09:41 123

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

变量内容的删除与替换

将local这两个目录删除掉:[linuxidc@ubuntu ~/Desktop/linux_study 09:47 #85]$echo $path/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games [linuxidc@ubuntu ~/Desktop/linux_study 09:49 #89]$echo ${path#/*local/bin:} /usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games

将sbin替换为SBIN:linuxidc@ubuntu ~/Desktop/linux_study 13:06 #95]$echo ${path/sbin/SBIN}/usr/local/SBIN:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games[linuxidc@ubuntu ~/Desktop/linux_study 13:06 #96]$echo ${path//sbin/SBIN}/usr/local/SBIN:/usr/local/bin:/usr/SBIN:/usr/bin:/SBIN:/bin:/usr/games:/usr/local/games

变量的测试与内容替换:[linuxidc@ubuntu ~/Desktop/linux_study 13:07 #97]$echo $username # username可能不存在或者为空字符串[linuxidc@ubuntu ~/Desktop/linux_study 13:09 #98]$username=${username-root}[linuxidc@ubuntu ~/Desktop/linux_study 13:10 #99]$echo $usernameroot # 没有设置,所以主动给予名为root的内容[linuxidc@ubuntu ~/Desktop/linux_study 13:10 #100]$username=”linuxidc”[linuxidc@ubuntu ~/Desktop/linux_study 13:10 #101]$username=${username-root}[linuxidc@ubuntu ~/Desktop/linux_study 13:10 #102]$echo $usernamelinuxidc

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

如果旧变量不存在,我们就以新变量内容替换;但是若旧变量存在,则新变量内容以旧变量替换。[linuxidc@ubuntu ~/Desktop/linux_study 13:10 #103]$unset str; var=${str-newvar}[linuxidc@ubuntu ~/Desktop/linux_study 13:18 #104]$echo var=”$var”,str=”$str”var=newvar,str= # 因为str不存在,所以var为newvar[linuxidc@ubuntu ~/Desktop/linux_study 13:19 #105]$str=”oldvar”;var=${str-newvar}[linuxidc@ubuntu ~/Desktop/linux_study 13:20 #106]$echo var=”$var”,str=”$str”var=oldvar,str=oldvar # 因为str存在,所以var等于str的内容

关于减号是不会影响旧变量的,如果想要旧变量内容也一起替换掉的话,就需要使用等号=:[linuxidc@ubuntu ~/Desktop/linux_study 13:20 #107]$unset str; var=${str=newvar}[linuxidc@ubuntu ~/Desktop/linux_study 13:25 #108]$echo var=”$var”,str=”$str”var=newvar,str=newvar[linuxidc@ubuntu ~/Desktop/linux_study 13:25 #111]$str=”oldvar”;var=${str=newvar}[linuxidc@ubuntu ~/Desktop/linux_study 13:25 #112]$echo var=”$var”,str=”$str”var=oldvar,str=oldvar

命令别名和历史命令

命令别名设置alias和unalias

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

另外,命名别名的设置还可以替代既有的命令,例如,当以root登录,使用rm命令可以删除所有文件,因此要特别小心,rm提供一个参数让我们确认是否删除该文件-i:[linuxidc@ubuntu ~ 13:35 #123]$alias rm=”rm -i”[linuxidc@ubuntu ~/Desktop/linux_study 13:39 #127]$rm 123rm: remove write-protected regular empty file ‘123’? y

去掉刚才的命名别名:[linuxidc@ubuntu ~/Desktop/linux_study 13:39 #128]$unalias rm

历史命令 history

查询曾经执行过的命令,最近4条:[linuxidc@ubuntu ~/Desktop/linux_study 13:42 #131]$history 4

Bash Shell的操作环境

路径与命令查找顺序

设置echo的别名为echo-n,然后再查看echo执行的顺序:[linuxidc@ubuntu ~/Desktop/linux_study 13:45 #132]$alias echo=”echo -n”[linuxidc@ubuntu ~/Desktop/linux_study 13:47 #134]$type -a echoecho is aliased to `echo -n’echo is a shell builtinecho is /bin/echo

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

终端环境设置:stty.set

如何查阅目前的一些按键内容呢?可以利用stty(setting tty终端机),stty可以帮助设置终端机的输入按钮代表意义。我们可以利用stty-a来列出目前环境中的所有按键列表。linuxidc@ubuntu:~$ stty -aspeed 38400 baud; rows 37; columns 80; 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 iutf8opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0isig icanon iexten echo echoe echok -echonl -noflsh -xcase -tostop -echoprtechoctl echoke

如果想要stty进行相关的字符删除:linuxidc@ubuntu:~$ stty erase ^h

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

Linux Shell脚本 多线程 http://www.68idc.cn/Linux/2015-10/123993.htm

Linux Shell在while中用read从键盘输入 http://www.68idc.cn/Linux/2015-06/118831.htm

Linux Shell 程序调试 http://www.68idc.cn/Linux/2015-07/119880.htm

Linux Shell脚本面试25问 http://www.68idc.cn/Linux/2015-04/116474.htm

Linux/Unix Shell 参数传递到SQL脚本 http://www.68idc.cn/Linux/2013-03/80568.htm

Shell脚本中参数传递方法介绍 http://www.68idc.cn/Linux/2012-08/69155.htm

Shell脚本传递命令行参数 http://www.68idc.cn/Linux/2012-01/52192.htm

Linux Shell 通配符、转义字符、元字符、特殊字符 http://www.68idc.cn/Linux/2014-10/108111.htm

没有行李,没有背包,不带电脑更不要手机,

Linux Shell 认识与学习

相关文章:

你感兴趣的文章:

标签云: