我是靠谱客的博主 魔幻店员,最近开发中收集的这篇文章主要介绍linux bash 设置变量,linux bash变量做用域,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

linux bash变量做用域linux

一,思考一个问题,当在shell里执行某个程序时,shell是怎么找到这个程序的?

shell会去$PATH环境变量定义的目录里去找这个命令。环境变量里通常包括/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin这么多目录,这些目录下又有上千个程序,从这么多目录里的,这么多程序里查找确定是花费时间的。shell为了提升查找效率,使用了缓存机制,这个机制叫hash。。c++

有了hash缓存后,shell先去hash里查找,若是找到了,就使用;若是没有找到,才去$PATH环境变量定义的目录里去找,找到后,把命令的路劲加程序名放入hash中。shell

注意:若是是shell的buildin命令,不会放入hash。缓存

hash命令用法:bash

查看hash里都缓存了哪些程序:hash微信

hits:表明此命令,被命中了几回。ssh # hash

hits command

1 /usr/bin/cat

2 /usr/bin/ls

详细查看hash里都缓存了哪些程序:hash -l函数 # hash -l

builtin hash -p /usr/bin/cat cat

builtin hash -p /usr/bin/ls ls

清除某个缓存:hash -d cat学习 # hash -d cat

# hash

hits command

2 /usr/bin/ls

清除全部缓存:hash -rui # hash -r

# hash

hash: hash table empty

为何还要清除缓存?理由:当把命令移动到别的目录后,用原来的缓存就找不到命令了,shell会报出错误,全部要清除。

二,bash变量的做用域

shell进程的子孙进程。

在shell进程里又启动了别的shell进程,下面的例子是在bash里又启动了一个bash,让后在新启动的bash里,又启动了一个csh。 # pstree

systemd─┬

├─sshd───sshd───bash───pstree

# bash

# csh

# pstree

systemd─┬

├sshd───sshd───bash───bash───csh───pstree

bash变量种类:

按变量的做用域范围分为:

本地变量:做用域仅为当前shell进程

验证本地变量的做用域: # firstName=jerry

# echo $firstName

jerry

# csh

# echo $firstName

firstName: Undefined variable.

# exit

exit

# echo $firstName

jerry

赋值:name=value

引用:${name},$name

"":变量会被替换成其值

'':变量不会被替换成其值

查看变量:set

撤销变量:unset name。注意name前不要加$ # firstname=tom

# echo $firstname

tom

# unset firstname

# echo $firstname

环境变量:做用域为当前shell进程,及其子孙shell进程。

验证环境变量的做用域: # fn=tom

# echo $fn

tom

# export fn

# csh

# echo $fn

tom

# exit

exit

# echo $fn

tom

赋值:

export name=value

name=value

export name

declare -x name=value

name=value

declare -x name

引用:同本地变量。

撤销变量:unset name。注意name前不要加$

bash内嵌的环境变量:

PATH,HISTORY,HISTSIZE,HISTFILESIZE,HISTCONTROL,SHELL,HOME,UID,PWD,OLDPWD

查看环境变量命令:

export,declare -x,printenv,env

只读变量(常量):做用域是当前shell进程,且不能够撤销。随当前shell进程的终止而终止。

declare -r name

readonly name

检证常量的做用域: # la=foo

# declare -r la

# echo $la

foo

# csh

# $echo la

echo: Undefined variable.

# exit

exit

# echo $la

foo

# la=aa

-bash: la: readonly variable

[root@localhost ~]# unset la

-bash: unset: la: cannot unset: readonly variable

局部变量:函数里的变量,做用域仅为函数内。

位置参数变量:shell脚本的参数

特殊变量:

$?:上一个命令的执行结果。0:成功;1-255:失败。

...

bash里,多个命令一块儿执行

多个命令连续执行:command1;command2;command3...

这些命令都会被执行。

多个命令逻辑连续执行

根据前面命令的执行结果(成功或者失败),决定是否执行后面的命令。

前一个命令执行成功后,后面的命令才让执行:&&

例子:先查看目录存不存在,存在了才进入此目录 # pwd

/root

# ls /sdf && cd /tmp

ls: cannot access /sdf: No such file or directory

# pwd

/root

# ls /sdf || cd /tmp

ls: cannot access /sdf: No such file or directory

# pwd

/tmp

前一个命令执行失败后,后面的命令才让执行:||

例子:先某个用户存不存在,不存在则建立此用户;存在了就不建立了。 # pwd

/root

# ls /sdf || cd /tmp

ls: cannot access /sdf: No such file or directory

# pwd

/tmp

三,如何执行shell脚本文件

1,用chmod赋予shell文件可执行权限。

./shell.sh

2,把shell文件(这个文件不须要有执行权限)做为参数,传给bash程序。

bash shell.sh

练习1

1,显示/etc目录下全部以p(不区分大小写)开头的文件或者目录自己。

2,显示/var目录下的全部文件或目录,并将显示结果中的小写字母转换为大写后显示

3,建立临时文件/tmp/myfile.XXXX #!/bin/bash

ls -ld /etc/p*

ls -d /var/* | tr 'a-z' 'A-Z'

mktemp /tmp/myfile.XXXX

四,bash配置文件

1,启动shell进程的种类:

交互方式启动的shell进程

直接经过终端输入帐号密码后登陆后,启动的shell进程

使用su命令:su - username,或者使用su-l username,登陆后,启动的shell进程

非交互方式启动的shell进程

使用su命令:su username,登陆后,启动的shell进程

在gnome或者kde下打开终端后,启动的shell进程

执行shell脚本文件时,启动的shell进程

2,bash配置文件的种类

profile类

对全部用户都有效,只有管理员才能够修改下面的配置文件

/etc/profile

/etc/profile.d/*.sh

仅对当前用户有效

~/.bash_profile

功用:

用于定义环境变量

运行命令或脚本

bashrc类

对全部用户都有效,只有管理员才能够修改下面的配置文件

/etc/bashrc

仅对当前用户有效

~/.bashrc

功用:

定义本地变量

定义命令别名

3,bash配置文件的加载顺序。

交互方式启动的shell进程

/etc/profile--->/etc/profile.d/*.sh--->~/.bash_profile--->~/.bashrc--->/etc/bashrc

非交互方式启动的shell进程

~/.bashrc--->/etc/bashrc--->/etc/profile.d/*.sh

4,从新加载配置文件

当修改配置文件后,是不会当即生效的

使用source 配置名,让修改的配置当即生效

五,用emacs编写shell脚本

1,自动补全的快捷键:ESC TAB

c/c++ 学习互助QQ群:877684253

a9a2df6356bd4c269a71d102.html

本人微信:xiaoshitou5854

最后

以上就是魔幻店员为你收集整理的linux bash 设置变量,linux bash变量做用域的全部内容,希望文章能够帮你解决linux bash 设置变量,linux bash变量做用域所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(60)

评论列表共有 0 条评论

立即
投稿
返回
顶部