linux 设置变量在脚本之外可用,Linux Shell编程二 Shell变量类型及运算符操作说明...

本文详细介绍了Shell的基本概念,包括它作为kernel的指令解析器的角色,以及bash、ksh等常见Shell类型。讨论了如何查看和切换Shell,以及bash的特点,如历史命令检索、命令补全、内置命令等。此外,文章还深入讲解了Shell变量,包括本地变量和环境变量的创建、使用和清除,并展示了各种变量替换技巧。最后,涵盖了Shell脚本中的引号用法、运算符和函数。
摘要由CSDN通过智能技术生成

什么是Shell:Shell是kernel之外的指令解析器

是一个程序,同时也是一种命令语言和程序设计语言

Shell中可运行子Shell

Shell的类型:ash、bash、ksh、csh、tcsh,一般RedHat Linux使用bash

[root@TIPTOP /root]# cat/etc/shells     #查看系统中有哪些Shell,可查看文件/etc/shells

[root@TIPTOP /root]# echo$SEHLL     #查看当前使用的Shell

[root@TIPTOP /root]# /bin/ksh              #直接改变Shell,使用ksh解释运行Shell脚本

[root@TIPTOP /root]# exit                      #退出/bin/ksh这个子Shell

bash特点:

1、方向↑↓箭,可方便查看历史命令,从而快速执行

2、命令行下,头字母下快速两次TAB键,可自动带出以该字母开头的命令

3、输入help命令,直接返回bash内置的常见的N多命令

4、``命令替换

[root@TIPTOP /root]# ll `cat test`       #即将cat test的结果传给ll命令,类似管道符

5、可用''或'' ''或\转义特殊字符

[root@TIPTOP /root]# touch dir1 dir2   #表示创建dir1和dir2两个文件

[root@TIPTOP /root]# touch dir1\ dir2  #表示只创建dir1 dir2这一个文件

[root@TIPTOP /root]# touch 'dir1 dir2'  #同上

6、;     允许在一行放多个命令

&    使命令后台执行

()    创建成组命令

{}    创建命令块

|    管道

<>&  重定向

*?[]!   模式匹配

$      变量名的开头

#     注释

空格、制表符、换行符  全部当做空白

Shell变量什么是Shell变量:内存中的一块,存取变量值

本地变量:只在用户现在的Shell生命周期的脚本中使用,子shell生命周期也不存在

[root@TIPTOP /root]# localtest="test"        #创建本地变量

[root@TIPTOP /root]# echo ${localtest}     #或echo $localtest

[root@TIPTOP /root]# readonly localtest   #设置本地变量localtest为只读变量,则不可对其再赋值

#设置成只读变量后则不能够再变回可写变量了

[root@TIPTOP /root]# readonly                  #查看当前shell下有哪些只读变量

[root@TIPTOP /root]# set                            #命令可显示本地所有的变量(包含本地及环境变量)

环境变量:用于所有用户进程(包含当前Shell及其所有子进程,包括编辑器、脚本、和应用;登陆进程成为父进程,shell中执行的用户进程均称为子进程)

一般于下面两个文件中设置:$HOME/.profile 或 $/HOME/.bash_profile  个人配置文件;/etc/profile 全局配置文件

[root@TIPTOP /root]# export gobaltest="test"  #创建环境变量gobaltest,赋值为test

[root@TIPTOP /root]# export                               #可显示所有的环境变量

[root@TIPTOP /root]# env                                    #可显示所有的环境变量

变量替换(显示变量):即用变量名显示变量值

[root@TIPTOP /root]# AXM="/u1/tiptop/axm"

[root@TIPTOP /root]# echo $AXM                  #则显示的值就是/u1/tiptop/axm

[root@TIPTOP /root]# echo ${AXM}                #则显示的值就是/u1/tiptop/axm

${variablename}            显示variablename的实际值

${variablename:+value}  如果设置了variablename,则显示其值,否则为空

${variablename:?value}  如果未设置variablename,则提示错误信息,信息为value

如果设置了variablename,则显示variablename的值

${variablename:-value}   如果未设置variablename,则显示value值

如果设置了variablename,则显示variablename的值

${variablename:=value}  如果未设置variablename,则设置其值为value并显示

如果设置了variablename,则显示variablename的值

清除变量:[root@TIPTOP /root]# unset  AXM   #清除AXM这个变量

#readonly的变量不可unset清除

位置变量:用于向系统命令传递参数或向脚本传参

$0:表示脚本名字

$1至$9:传递参数

标准变量:系统预置的一些标准变量,于/etc/profile文件中定义

$EXINIT:vi的一些设置

$HOME:用户的根目录

$IFS:分割符号(ex:$PATH变量中的分割符号)

$LOGNAME:登陆用户的用户名

$MAIL:当前用户存储的邮箱放置地方

$MAILCHECK:每隔多少秒检查是否有邮件

$MAILPATH:如果有多个邮件时,定义邮件的存放位置

$PATH:可执行文件去寻找的路径

$PS1:命令行提示符(ex:[\u@\h  \W]\$ 即表示[用户名@主机名当前路径]$)

$PS2:命令行Shell编辑时,分行后首字符的提示符号

$SHELL:当前使用的是什么Shell

$TERM:系统登陆后默认的终端类型

$TERMINFO:终端类型的配置信息

$TZ:时区

$EDITOR

$PWD:当前目录

$MANPATH:帮助文档的路径

特殊变量

$#:  传递到脚本的参数个数

$*:  以一个单字符串显示所有向脚本传递的参数

与位置变量不同,此选项参数可超过9个

$$:  脚本运行的当前进程ID号

$!:   后台运行的最后一个进程的进程ID号

$@:与$*相同,但是使用时加引号,并在引号中返回每个参数

$-:  显示shell使用的当前选项,与set命令功能相同

$?: 显示最后命令的退出状态,0表示成功,其他任何值都表示有错误

影响变量的命令

declare:设置或显示变量

-f  只显示函数名

-r  创建只读变量(declare和typeset)

-x  创建转出变量

-i  创建整数变量

使用+替代-,可以颠倒选项的含义,但是-r设置只读变量后就不可颠倒了

exprot:用于创建环境变量

--  表明选项结束,所有后续参数都是实参

-f  表明在"名-值"对中的名字是函数名

-n  把全局变量转换为局部变量

-p  显示全局变量列表

readonly:用于显示或设置只读变量

--  表明选项结束

-f  创建只读变量

set:设置或重设各种Shell

unset:清除变量

--  表明选项结束

-f  删除只读变量,但不能取消从Shell环境中删除指定的变量和函数,ex:$PATH

shift  n:用于移动位置变量,调整位置变量,n表示向前移动的位数

默认移动一位,即使$3的值赋给$2,$2的值赋给$1

typeset:用于显示或设置变量,同declare

Shell script中的引号

双引号:可引用除字符$、`(反引号)、\外的任意字符或字符串

[root@oracle11g root]# echo -e "hello,$SHELL '\n* ERP-`echo tiptop` *"

hello,/bin/bash '

* ERP-tiptop *

单引号:与双引号类型

但是单引号会忽略所有任何被引号括其来的值,而是将结果作为一个字符串

[root@oracle11g root]# echo -e "hello,$SHELL '\n* ERP-`echo tiptop` *"

hello,$SHELL '\n* ERP-`echo tiptop`

反引号:用于设置系统命令的输出到变量

即将反引号里面的内容作为系统的Shell脚本,并执行其内容

[root@oracle11g root]# echo -e "hello  `echo world`"

hello world

反斜杠:屏蔽转义特殊字符含义.ex:&、*、+、^、$、`、? 等

[root@oracle11g root]# echo \*   #如果不加\,则表示列示当前路径下所有文件信息

*

Shell script中的运算符

位运算符:~ 取反、<>右移、& 与、| 或、^异或

逻辑运算符:&&逻辑与、||逻辑或、>、==、

赋值运算符:=、+=、-+、*=、/=、%=、&=、^=、|=

Let count+=5

表达式替换:$[ ] 和 $(( )),两个作用相同。表示括号中的表达式求值

$[ ]:可以接受不同基数的数字

[base#n] n表示基数从2到36的任何基数

[root@oracle11g root]# echo $[ 7+8 ]        #靠近括号边留空格

15

[root@oracle11g root]# echo $[ 10#8+1 ] #表示8进制的10加1

9

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值