目录
认识bash
Shell:计算机的硬件只能识别0或1的电信号,所以shell就相当于是一个翻译器;它将我们所输入的命令翻译成cpu能读懂的语言,cpu执行完命令之后再发送给shell,shell再解析成我们能看懂的语言;shell是个虚无缥缈的东西,看不见摸不着,当在Linux中打开一个终端的时候,并不是shell;而终端只是连接用户和shell的桥梁(如:putty、SecCRT);
查看系统支持的shell:cat /etc/shells
注:不同的系统使用的shell是不同的,在Linux中默认使用的是bash
切换到其它的shell:ksh、csh 直接输入shell的名称即可
shell的优点:
1、远程管理计算机的时候,用命令比图形化界面的效率高
2、大量的快捷键
3、安全性更高
查看内、外部命令:type cd
当在一行需要敲多条命令的时候,要用分号隔开;
如:cal ; date
如果命令太长,可以写一个反斜杠加回车;系统会认为下面一条的命令是上一条命令的延续;
shell的变量功能
变量的分类
本地变量:只会影响当前的shell,而不会影响子shell
环境变量:会影响到所有的子shell
位置变量:位置参数一般多用于shell编程当中
变量的格式
变量名=值
定义变量名:由字母、数字、下划线组成;但是不能以数字开头;等号两边不能有空格
定义本地变量:xx=19
查看变量:echo $xx
取消变量:unset xx
定义环境变量:export yy=10
declare –x cc=3
aa=1 ; export aa
取消环境变量: declare +x cc=3
查看系统中的所有变量:set
查看所有的环境变量:env;export;或者export –p
常见环境变量:
echo $PATH 系统默认的命令路径
echo $HOME 用户的家目录
echo $USER 当前登录的用户
echo $HISTORYFILESIZE 设置系统默认记录1000条历史命令
echo $PS1 系统中默认打开终端的提示符
echo $PS2 系统中默认设置长明令换行的字符
注:开头#!/bin/bash为固定shell编程写法
$0表示这个文件的名字
当参数的个数是两位数的时候,需要用大括号括起来;${12}
$#表示参数的个数,$*表示所有的参数
执行程序:./xx.shells a b c d
语系变量:
查看系统所有的编码:locale –a
查看系统当前使用的编码:echo $LANG
变量键盘读取、数组与申明
变量键盘读取:read
例:read xx
当按回车之后系统会等待用户输入值,并将用户输入的值赋给xx变量;如果read后面不跟变量,则用户输入的值会被赋给系统的一个默认变量$REPLY
实际中read在脚本程序中使用居多,例如下面的脚本程序:
#!/bin/bash
echo “请输入您的名字:”
read name
echo “欢迎您,$name”
运行效果:
数组:array
定义数组:xx=(aa bb cc dd)
读取数组:echo ${xx[0]}
读取数组全部的值:echo ${xx[*]} 或者echo ${xx[@]}
查看数组的下标:echo ${!xx[*]}
查看数组中元素的个数:echo ${#xx[*]}
declare
用来定义变量: declare aa=1
定义环境变量: declare -x aa=1
取消环境变量: declare +x aa=1
定义只读的变量:declare –r aa 或者 readonly aa
注:echo $xx和xx= ;echo $xx是不一样的,前者表示xx这个变量不存在而后者表示存在xx这个变量,只不过这个变量的值是空值
单引号、双引号、反引号
双引号:可以正常解析变量的值,并且输入
单引号:不解析变量的值,直接原样输出引号中的内容
反引号:在一条命令中嵌套引用变量
但在有些特定的情况下多使用{},而不是使用引号
例如:当想要在book这个参数加上s的时候,系统则会把xxs作为整体误以为是参数,但是实际上系统中并没有xxs这个参数,按回车之后就不会显示;所以这时候这时候就需要使用{}
反引号:在一条命令中嵌套引用变量,需要使用反引号(` `),或者使用$()
例:echo “xxxxxxxxxxx `hostname` xxxxxxxxxxx ”
echo “xxxxxxxxxxx $(hostname) xxxxxxxxxxx ”
文件系统与程序的限制关系:ulimit
系统性能一直是一个受关注的话题,如何通过最简单的设置来实现最有效的性能调优,如何在有限资源的条件下保证程序的运作,ulimit 是我们在处理这些问题时,经常使用的一种简单手段。ulimit 是一种 linux 系统的内键功能,它具有一套参数集,用于为由它生成的 shell 进程及其子进程的资源使用设置限制。
查看限制:ulimit -a
限制创建文件大小:ulimit -f 20480
更多使用请查看帮助信息:ulimit --help
变量内容的删除
从前往后删:#
r=${path#*Kerberos/bin}
一个井号表示从开头位置起,一直删到第一个匹配的位置(含匹配到的也删除)
r=${path##*Kerberos/bin}
两个井号表示从开头位置起,一直删到最远匹配的位置(含匹配到的也删除)
从后往前删:%
r=${path%bin*}
一个%表示从结尾位置起,一直删到第一个匹配的位置(含匹配到的也删除)
r=${path%%bin*}
两个%表示从结尾位置起,一直删到最远匹配的位置(含匹配到的也删除)
变量的替代与替换
r=${xx-“aaaaaaa”}
表示如果xx未定义,则会把aaaaa赋给r;如果xx定义了则把xx的值赋给r; -只能用来判断变量是否存在
r=${xx:-“aaaaaa”}
功能与xx-相同,唯一多出来的是:-不仅判断变量是否存在,还判断变量是否为空值;如果变量为空值,则会把aaaaaa赋给r
r=${xx:=“aaaaaa”}
表示如果说xx未定义,aaaaaa同时赋值给xx、r;如果说xx定义了但为空值,aaaaaa还是会同时赋值给xx、r
r=${xx:?“aaaaaa”}
表示如果说xx有非空值,则会将aaaaaa赋值给r;相反就会将冒号中间的信息打印到屏幕上作为警告
r=${xx:+“aaaaaa”}如果说xx定义了并且是非空值,则会将aaaaaa赋值给r;
总结: -表示判断变量是否存在,: 表示判断变量是否为空值,= 表示同时给两个变量赋值,? 表示打印警告信息,+ 表示定义的变量是否为空值
命令别名与历史命令
命令别名
在管理和维护Linux系统的过程中,将会使用到大量命令,有一些很长的命令或用法经常被用到,重复而频繁地输入某个很长命令或用法是不可取的。这时可以使用命令别名功能将这个过程简单化,通过将一个复杂的命令建立别名后,就可以通过别名来重复调用该命令;在Linux系统中默认会定义很多的别名;
查看系统别名:alias
新建别名:alias aa=”ifconfig eth0”
取消别名:unalias aa
历史命令
在系统中会默认记录1000条使用过的历史命令
查看历史命令:history
快速调用历史命令:!378
清空所有历史命令:history –c
原创文章,转载请注明出处