当前位置 : 主页 > 网络编程 > PHP >

认识学习bash及shell变量功能

来源:互联网 收集:自由互联 发布时间:2023-10-08
一.什么是shell 只要能够操作应用程序的接口都能够称为shell。狭义的shell指的是命令行方面的软件,包括bash等;广义的shell则包括图形界面的软件,因为图形界面其实也是能够操作各种
一.什么是shell
只要能够操作应用程序的接口都能够称为shell。狭义的shell指的是命令行方面的软件,包括bash等;广义的shell则包括图形界面的软件,因为图形界面其实也是能够操作各种应用程序来调用内核工作的。
例如:以下是我检查了/etc/shells这个文件发现至少有这几个可以用的shell
[leiyuxing@centos6 ~]$ cat /etc/shells
/bin/sh
/bin/bash
/sbin/nologin
/bin/dash
/bin/tcsh
/bin/csh
二.bash shell的功能
/bin/bash是Linux默认的shell,bash主要兼容于sh,并且依据一些用户的需求而加强的shell版本。
bash主要优点:
1.命令记忆能力(history)
在bash里能记忆用过的命令,~/.bash_history记录的是前一次登录以前所执行过的命令,而至于这一次登录所执行的命令都会被暂存在临时内存中,当你注销系统后,该命令记忆才会记录到.bash_history中,按上下键可查找前后输入的命令。
2.命令别名设置功能(alias)
alias就可知道目前命令别名:
[leiyuxing@centos6 ~]$ alias
alias l.='ls -d .* --color=auto'
alias ll='ls -l --color=auto'
alias lm='ls -al'
alias ls='ls --color=auto'
alias sqlplus='rlwrap sqlite3'
alias vi='vim'
alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'
也可直接执行命令设置别名:
[leiyuxing@centos6 ~]$ pwd
/home/leiyuxing
[leiyuxing@centos6 ~]$ alias p='pwd'
[leiyuxing@centos6 ~]$ p
/home/leiyuxing
3.命令与文件补全功能([tab])
输入命令时用【tap】键可自动补齐,没什么好说的用多你就知道了!
三.bash shell的内置命令:type
type [-tpa] name
type:不加任何参数时,type会显示出name事外部命令还是bash内置命令
-t:当加入-t参数时,type会将name以下面这些字眼显示出它的意义:
:表示为外部命令;
表示该命令为命令别名所设置的名称;
builtin:表示该命令为bash内置的命令功能。
-p:如果后面的name为外部命令时,才会显示完整的文件名;
-a:会由PATH变量定义的路径中,将所有含name的命令都列出来,包括alias
示例一:查询一下ls命令是否是bash内置
[leiyuxing@centos6 ~]$ type ls
ls is aliased to `ls --color=auto' //未知任何参数,列出ls的最主要使用情况
[leiyuxing@centos6 ~]$ type -t ls
alias //仅列出ls执行时的依据
[leiyuxing@centos6 ~]$ type -a ls
ls is aliased to `ls --color=auto' //最先使用aliase
ls is /bin/ls //还有找到外部命令在/bin/ls

示例二:那么cd呢?
[leiyuxing@centos6 ~]$ type cd
cd is a shell builtin //cd是shell的内置命令
故通过type这个命令我们可以知道每个命令是否为bash内置命令。type主要在找出“执行文件”而不是一般文件名。所以,这个type也可以用来类似which命令的用途。
四.命令的执行
例如:若命令串太长的话,如何使用两行来输出
[leiyuxing@centos6 ~]$ cp /var/spool/mail/root /etc/crontab \
> /etc/fstab /root
上面这个命令的用途是将三个文件复制到/root这个目录
切记”\[Enter]”用来转义中间不允许有空格存在!
五.shell的变量功能
1.变量的显示:echo
[leiyuxing@centos6 ~]$ echo $PATH
/usr/lib/qt-3.3/bin:/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/leiyuxing/bin
2.如何设置或者修改某个变量的内容?
例:我们将myname这个变量名称的内容设置为leiyuxing,那么
[leiyuxing@centos6 ~]$ echo $myname
//这里没有任何数据,因为这个变量尚未被设置,是空的
[leiyuxing@centos6 ~]$ myname=leiyuxing
[leiyuxing@centos6 ~]$ echo $myname
leiyuxing //出现了,因为这个变量已经被设置
3.变量的设置规则
》变量与变量的内容以一个“=”连接
》等号两边不能直接接空格符
》变量名称只能是英文字母与数字,但是开头字符不能是数字
》变量内容若有空格符可用双引号“””或单引号“`”(注:“`”为数字1左边那个按键)将变量内容结合起来
双引号内的特殊字符如$等,可保持原有显示特性,如下显示:
var=”lang is $LANG””.则“echo $var”可得“lang is en_US”
单引号内的特殊字符则仅为一般字符(纯文本),如下所示:
ar=`lang is $LANG`”,则“echo $var”,则可得“ar=lang is $LANG”
》转义字符“\”将特殊字符(如[Enter,$,\,空格符,!等)变成一般字符
》若要取得内核版本的设置:
[leiyuxing@centos6 ~]$ version=$(uname -r)
[leiyuxing@centos6 ~]$ echo $version
2.6.32-573.el6.i686
》若该变量增加了变量的内容,可用“$变量名称”或${变量}累加内容,如下所示:
“PATH=”$PATH”:/home/bin”
》若该变量在其他子进程执行,则需要export来使变量变成环境变量:
export PATH”
》取消变量的方法为使用“unset变量名称”。
4.环境变量
a.用env查看环境变量与常见变量说明
b.用set查看所有变量(含环境变量与自定义变量)
c.用export自定义变量转成环境变量,
若想要该内容在子进程中使用,则执行export变量名称
5.影响结果的语系变量
例:[leiyuxing@centos6 ~]$ locale
LANG=zh_CN.UTF-8
LC_CTYPE="zh_CN.UTF-8"
LC_NUMERIC="zh_CN.UTF-8"
LC_TIME="zh_CN.UTF-8"
LC_COLLATE="zh_CN.UTF-8"
LC_MONETARY="zh_CN.UTF-8"
LC_MESSAGES="zh_CN.UTF-8"
LC_PAPER="zh_CN.UTF-8"
LC_NAME="zh_CN.UTF-8"
LC_ADDRESS="zh_CN.UTF-8"
LC_TELEPHONE="zh_CN.UTF-8"
LC_MEASUREMENT="zh_CN.UTF-8"
LC_IDENTIFICATION="zh_CN.UTF-8"
LC_ALL=
6.变量键盘的读取,数组与声明:read,array,declare
(1)#read [-pt] variable
参数:
-p:后面可以接提示符
-t:后面可以接等待的秒数
示例一:让用户由键盘输入内容,将该内容变成名为atest的变量
[leiyuxing@centos6 ~]$ read atest
my name is leiyuxing//光标会等待我输入,此为我输入的内容
[leiyuxing@centos6 ~]$ echo $atest
my name is leiyuxing//我刚才输入的数据变成了一个变量内容
示例二:提示用户30秒内输入自己的大名,将该输入字符串作为名为named的变量内容
[leiyuxing@centos6 ~]$ read -p "Please keyin your name:" -t 30 named
Please keyin your name:leiyuxing//注意看会有提示符
[leiyuxing@centos6 ~]$ echo $named
leiyuxing//输入的数据又变成一个变量的内容
(2)declare/typeset
#declare [-aixr] variable
-a:将后面的 variable的变量定义为数组类型
-i:将后面的 variable的变量定义为整数数字类型
-x:用法和export一样,就是将后面的variable变成环境变量
-r:将变量设置为readonly类型,该变量不可被更改内容,也不能重设
示例一:让变量sum进行1+2+3的累加结果
[leiyuxing@centos6 ~]$ sum=1+2+3
[leiyuxing@centos6 ~]$ echo $sum
1+2+3 //怎么没有帮我计算和?因为这个文字类型的变量属性
[leiyuxing@centos6 ~]$ declare -i sum=1+2+3
[leiyuxing@centos6 ~]$ echo $sum
6
示例二:将sum变成环境变量
[leiyuxing@centos6 ~]$ declare -x sum
[leiyuxing@centos6 ~]$ export | grep sum
declare -ix sum="6" //果然出现了,包括i与x的声明
示例三:让sum变成只读属性,不可改动
[leiyuxing@centos6 ~]$ declare -r sum
[leiyuxing@centos6 ~]$ sum=tesgting
-bash: sum: readonly variable//不能改这个变量了
示例四:让sum变成非环境变量的自定义变量
[leiyuxing@centos6 ~]$ declare +x sum//将-变成+可取消操作
[leiyuxing@centos6 ~]$ declare -p sum//-p可单独列出变量的类型
declare -ir sum="6"//此时只剩i,r的类型,不具有x了
(3)数组(array)变量类型
#var[index]=content
例:
[leiyuxing@centos6 ~]$ var[1]="small min"
[leiyuxing@centos6 ~]$ var[2]="big min"
[leiyuxing@centos6 ~]$ var[3]="nice min"
[leiyuxing@centos6 ~]$ echo "${var[1]}, ${var[2]}, ${var[3]}"
small min, big min, nice min
网友评论