【Linux】shell编程之给变量赋值的五种方法

1.  Shell中的变量类型

Shell中的变量可以分为环境变量、位置变量、预定义的特殊变量以及用户自定义变量、

<!--[if !supportLists]-->2.  <!--[endif]-->环境变量

Shell中的环境变量是一类Shell预定义变量,是用于设置系统运行环境的变量,环境变量由系统统一命名。部分系统变量的值由系统设定,部分环境变量的值可以由用户给定。

环境变量的名称由大写字母组成,常用的Shell环境变量如下所示:

HOME: 用户主目录的全路径名,cd $HOME 即可切换到用户的主目录

PATH: 类似于windows下的路径,Shell会在里面依次寻找二进制的可执行文件。

echo $PATH可以显示当前的PATH,添加新的PATH方法 $PATH=$PATH:新PATH

TERM:  终端类型 echo $TERM

PS1:   提示符,root用户默认为#,普通用户默认为$

SHELL: Shell解释器的绝对路径

LOGNAME: 登录用户的用户名

UID:  当前用户的UID    echo $UID

<!--[if !supportLists]-->3.  <!--[endif]-->位置变量

位置变量是根据出现在命令行上的参数的位置确定的变量,在调用Shell程序的命令行中,参数的位置定义如下所示。

$命令  参数1   参数2  参数3

其中  $0  对应  执行的命令名

$1  对应  参数1

$2  对应  参数2

$3  对应  参数3

一定要搞清楚顺序!!

<!--[if !supportLists]-->4.  <!--[endif]-->预定义的特殊变量

预定义的特殊变量有着特殊的含义,用户不可以更改,所有的预定义变量都由“$”符号和另外一个符号组成,常用的预定义特殊变量如下所示

$#: 位置参数个数(不包括Shell脚本名)

$*:  位置参数组成的字符串

$!:   上一个后台命令对应的进程号

$?:   上一个命令的退出状态,为十进制数字,如果返回为0,则代表执行成功。

$$:   当前的进程号PID

<!--[if !supportLists]-->5.  <!--[endif]-->用户自定义变量 (大小写敏感

要求: 变量名由字母或者下划线开头,后面跟任意数量的字母、数字、下划线。

合法的:

_name    SIZE    my_idea

非法的:

2god      !name   hello&world

<!--[if !supportLists]-->6.  <!--[endif]-->变量的创建

有两个内置的命令declare 和 typeset 可用于创建变量。通过命令的选项设置还可以设定变量的创建方。

除了使用内置命令来创建和设置变量外,还可以直接赋值,格式为:

变量名=变量值

注意:变量名前面不应加美元“$”符号。(和PHP不同)

等号“=”前后不可以有空格。

和C语言不同,Shell中不需要显式的语法来声明变量。

变量名不可以直接和其他字符相连,如果想相连,必须用括号:echo “this is $(he)llo!”

<!--[if !supportLists]-->7.  <!--[endif]-->变量的删除

系统提供unset命令可以删除变量,例如

unset  name

<!--[if !supportLists]-->8.  <!--[endif]-->变量的赋值

变量的赋值有五种:使用read命令,直接赋值,使用命令行参数,使用命令行的输出结果,从文件读取。

先说一下从read命令吧:(主要是在需要交互时使用

Read命令是系统内置命令,语法格式为:

read  变量1   变量2

当Shell脚本执行到read命令时,将暂停脚本的执行并等待键盘的输入,当用户输入完毕并且敲下回车之后,将完成赋值操作,脚本继续执行。

Read指令的规则:

<!--[if !supportLists]-->l  <!--[endif]-->多个数据或变量之间用空格隔开

<!--[if !supportLists]-->l  <!--[endif]-->若变量个数与数据个数相等时,对应取值

<!--[if !supportLists]-->l  <!--[endif]-->若变量个数大于数据个数时,没有输入数据的变量取空值

<!--[if !supportLists]-->l  <!--[endif]-->若变量个数小于数据个数时,将多余的数据赋给最后一个变量(也就是把空格当成字符串处理)

例子:

#!/bin/bash

echo –n “ please enter your name”  //-n 表示用户输入和提示信息在同一行

read name

echo “your name is $name”

#!/bin/bash

echo “Please  enter  your  first name  and last name :”

read first last

echo “your first name is $first”

echo “your last name is $last”

第二种赋值方法就是直接给变量赋值(这种赋值方法主要是在不需要交互时,并且参数不需要修改时使用

例如:name=xiaosu

gender=man

第三种赋值方法是使用命令行参数赋值。(这种赋值方法是参数需要经常变化,并且不需要交互时使用

这种赋值方法,也就是直接在命令后面跟参数,然后系统用$1来引用第一个参数。

第四种方法是利用命令的输出结果赋值(这种赋值方法可以直接处理上个命令产生的数据

在Shell程序中,可以将一个命令的输出结果来当做变量,不过需要在赋值语句中使用反引号

例如currentdir=`pwd`

echo $currentdir

最后一种赋值方法是从文件中读入数据

这种方式就适合处理大批量的数据,直接把相应的数据写入文件,然后运行脚本即可。

通常是通过while循环一行行读入数据,即没循环一次,就从文件中读取一行数据,直到读取到文件的结尾。

例如:

#!/bin/bash

ls *.sh >execfile

while read LINE

do

chmod a+x $LINE

done<execfile

这个脚本使用了while..do..done 结构,最后一行表示从文件execfile读取数据。while read LINE表示 每次循环读入一行数据并赋值给变量LINE。

<!--[if !supportLists]-->9.  <!--[endif]-->变量的输出

最简单的方法就是使用echo

如果想输出格式化的字符串,就需要使用printf,用法和C语言类似

printf 命令的格式说明符

\”    输出双引号

\\    输出反斜杠

\a    响铃

\n    换行

\r     回车

时间: 2024-08-03 02:40:39

【Linux】shell编程之给变量赋值的五种方法的相关文章

给成员变量赋值的两种方法

JAVA 跟C++ 差不多,给类里面的私有成员变量一般有两种方法: 一种是通过 成员函数 来赋值 一种是:通道构造函数来赋值 /* 我们一直在使用构造方法,但是,我们确没有定义构造方法,用的是哪里来的呢? 构造方法的注意事项: A:如果我们没有给出构造方法,系统将自动提供一个无参构造方法. B:如果我们给出了构造方法,系统将不再提供默认的无参构造方法. 注意:这个时候,如果我们还想使用无参构造方法,就必须自己给出.建议永远自己给出无参构造方法 给成员变量赋值有两种方式: A:setXxx() B

(一)Linux Shell编程——简介、变量

1. Shell简介 1.1 Shell出现背景 Shell 既是一种脚本编程语言,也是一个连接内核和用户的软件. 对于图形界面,用户点击某个图标就能启动某个程序:对于命令行,用户输入某个程序的名字(可以看做一个命令)就能启动某个程序.这两者的基本过程都是类似的,都需要查找程序在硬盘上的安装位置,然后将它们加载到内存运行.然而,真正能够控制计算机硬件(CPU.内存.显示器等)的只有操作系统内核(Kernel),图形界面和命令行只是架设在用户和内核之间的一座桥梁. 由于安全.复杂.繁琐等原因,用户

Linux Shell编程之特殊变量

$0 这个是脚本文件的路径本身(相对路径) 如果当前目录下有执行脚本文件,就不能写绝对路径进行执行. $# 这个变量用来记录输入参数的个数 6就是本次执行命令时输入的参数个数. $* 这个变量记住了所有输入的参数 [email protected] 这个变量也记住了所有输入的参数 那么[email protected] 和$* 有什么区别的?[email protected]是将三个参数合成一个字符串了,而$* 是将三个参数看做三个字符串 原文地址:http://blog.51cto.com/y

Linux shell 中判断一个变量是否为空 的方法

判断一个脚本中的变量是否为空,我写了一个这样的shell脚本: #!/bin/sh #filename: test.sh para1= if [ ! -n $para1 ]; then echo "IS NULL" else echo "NOT NULL" fi 然后把该脚本:test.sh通过chmod +x 改为可以执行的脚本,执行后输出的结果为: NOT NULL,很是奇怪,最后,通过查询一些资料发现,可以通过如下方式判断一个shell变量是否为空: 1. 变

linux shell 多个命令一起执行的几种方法

在命令行可以一次执行多个命令,有以下几种: 1.每个命令之间用 ; 隔开 说明:各命令的执行结果,不会影响其它命令的执行.换句话说,各个命令都会执行, 但不保证每个命令都执行成功. cd /home/PyTest/src; python suning.py 2.每个命令之间用&&隔开 说明:若前面的命令执行成功,才会去执行后面的命令.这样可以保证所有的命令执行完毕后,执行过程都是成功的. cd /home/PyTest/src&&python suning.py 3.每个命

驱动中获取PsActiveProcessHead变量地址的五种方法也可以获取KdpDebuggerDataListHead

PsActiveProcessHead的定义: 在windows系统中,所有的活动进程都是连在一起的,构成一个双链表,表头是全局变量PsActiveProcessHead,当一个进程被创建时,其ActiveProcessList域将被作为节点加入到此链表中:当进程被删除时,则从此链表中移除,如果windows需要枚举所有的进程,直接操纵此链表即可. 方法一:从KdInitSystem函数地址处硬编码搜索 方法二:从System进程(pid=4)的PEPROCESS地址获取 方法三:从ntoskr

Linux Shell编程之五字符串的处理

shell编程之字符串处理 在 shell 中,由于是一种弱类型的语言,在没有事先申明变量类型的情况下,所有的变量都是字符串.所以对字符串的处理就显得相当重要了. 下面介绍常见的对字符串处理的操作. 一.字符串切片 ${string_var:offest:length},类似于数组元素的提取. # 这里的string_var是一个变量,offest 是字符串的开始偏移量,length是切去字符串的长度 var=dhcpd:x:177:177:DHCP server:/:/sbin/nologin

Linux Shell编程之二选择结构

Shell编程学习之二 一.bash的条件测试 测试方法或者说测试书写: test EXPR [ EXPR ] [[ EXPR ]] 例如:测试变量 User_Name 的之是否为root test $User_Name="root" [ $User_Name == "root" ] [[ $User_Name == "root" ] 根据比较时操作数的类型,测试类型分为: 测试类型 运算符 运算符所代表的意义 示例 整形测试 -gt -lt -

京峰Linux Shell编程从入门到精通

课程介绍:Shell是系统的用户界面,提供了用户与内核进行交互操作的一种接口.它接收用户输入的命令并把它送入内核去执行. -------------------课程目录------------------- <Shell编程从入门到精通> ├1.linux下shell编程基础入门_(new).mp4├2.Shell编程之变量及LAMP导航菜单编写_(new).mp4├3.Shell编程之IF条件语句各种案例演练_(new).mp4├4.使用if条件语句编写MySQL备份脚本_(new).mp4