UNIX Shell 编程(6)

简介: UNIX Shell 编程(6)   变量 UNIX Shell允许把值存在变量中。 要把值存入一个变量,只需写出变量名,后面紧跟一个等号,再紧跟变量值。

UNIX Shell 编程(6)

 

变量
UNIX Shell允许把值存在变量中。
要把值存入一个变量,只需写出变量名,后面紧跟一个等号,再紧跟变量值。
variable=value
切忌中间含空格
Shell中没有任何数据类型的概念,变量值通通认为是字符串。
如:
[root@localhost programs]# count=1
[root@localhost programs]# echo $count 
1
再如:
[root@localhost programs]# my_bin=/tools/jdk6/bin
[root@localhost programs]# echo $my_bin
/tools/jdk6/bin
[root@localhost programs]# ls $my_bin
appletviewer HtmlConverter java javap jcontrol jmap jstack keytool policytool schemagen unpack200
apt idlj javac java-rmi.cgi jdb jps jstat native2ascii rmic serialver wsgen
ControlPanel jar javadoc javaws jhat jrunscript jstatd orbd rmid servertool wsimport
extcheck jarsigner javah jconsole jinfo jsadebugd jvisualvm pack200 rmiregistry tnameserv xjc
例3:
[root@localhost programs]# command=wc
[root@localhost programs]# file=names
[root@localhost programs]# option=-l
[root@localhost programs]# $command $option $file
6 names

变量还能传值,如下:
[root@localhost programs]# value1=10
[root@localhost programs]# value2=$value1
[root@localhost programs]# echo $value2
10

POSIX标准Shell为变量整数运算提供了一套机制,称为算术扩展。
格式为:$((expression))
其中,expression是由变量和运算符构成的算是表达式。
如:
[root@localhost programs]# echo $a

[root@localhost programs]# echo $((a=a+1))
1
[root@localhost programs]# echo $a
1
再如:
[root@localhost programs]# result=$((i>=0&&i 如果表达式结果为真,result赋值1;否则赋值0.
[root@localhost programs]# echo $result
1
例3:
[root@localhost programs]# i=$((100*200/10))
[root@localhost programs]# j=$((i [root@localhost programs]# echo $i $j
2000 0


单引号和双引号
单引号告诉Shell忽略所包含的所有特殊字符。
如:
[root@localhost programs]# file=/tools/jdk
[root@localhost programs]# echo $file
/tools/jdk
[root@localhost programs]# echo '$file'
$file
[root@localhost programs]# echo *
addresses collect data data2 intro lotsapaces mon names nu numbers phonebook sorted_name1 sorted_name2 stats tally temp wbb2 wbx writeback
[root@localhost programs]# echo '*'
*
而双引号只要求忽略大多数。
在双引号中,有三种特殊字符不会被忽略:
1)美元符号$
2)反引号`
3)反斜杠/
如:
[root@localhost programs]# x=*
[root@localhost programs]# echo '$x'
$x
[root@localhost programs]# echo "$x"
*
可见,在双引号内部也进行了变量名替换。
反斜杠的例子:
[root@localhost programs]# echo />
>
[root@localhost programs]# x=*
[root@localhost programs]# echo /$x
$x
可见,反斜杠进行了转义。

反斜杠还可用于换行:
[root@localhost programs]# lines=one/
> two
[root@localhost programs]# echo $lines
onetwo


命令替换:指Shell能够将一个命令的标准输出插入一个命令行中任何位置的功能。
Shell有两种方法做命令替换:
1)用反引号
2)使用$(...)结构括起来

反引号:其目的不是防止Shell处理某些字符,二是要告诉Shell执行括起来的命令,并将该命令的标准输出插在命令行中的这个位置。例如:
[root@localhost programs]# echo The date and time is: `date`
The date and time is: Thu Apr 16 16:11:40 CST 2009
[root@localhost programs]# echo Your current working directory is `pwd`
Your current working directory is /tools/test/programs

POSIX标准Shell支持新的$(...)命令替换结构,格式为:
$(command)
例如:
[root@localhost programs]# echo The date and time is: $(date)
The date and time is: Thu Apr 16 16:13:34 CST 2009
[root@localhost programs]# echo Your current working directory is $(pwd)
Your current working directory is /tools/test/programs
此结构比使用反引号要好,原因如下:
1)复杂的命令中组合使用正、反引号会很难看懂,而且在某些字体显示下难以区分;
2)$(...)结构容易嵌套。

例如:
[root@localhost programs]# cat nu
echo There are $(who | wc -l) users logged in
[root@localhost programs]# ./nu
There are 1 users logged in

[root@localhost programs]# now=$(date)
[root@localhost programs]# echo $now
Thu Apr 16 16:32:10 CST 2009

[root@localhost programs]# filelist=$(ls)
[root@localhost programs]# echo $filelist
addresses collect data data2 intro lotsapaces mon names nu numbers phonebook sorted_name1 sorted_name2 stats tally temp wbb2 wbx writeback

命令替换可嵌套,如下:
[root@localhost programs]# filename=/tools/test/programs
[root@localhost programs]# ls $filename
addresses data intro mon nu phonebook sorted_name2 tally wbb2 writeback
collect data2 lotsapaces names numbers sorted_name1 stats temp wbx
[root@localhost programs]# firstchar=$(echo $filename | cut -c1)
[root@localhost programs]# echo $firstchar
/
[root@localhost programs]# echo $filename
/tools/test/programs
[root@localhost programs]# echo $filename | cut -c1
/
[root@localhost programs]# filename=$(echo $filename | tr "$firstchar" "^")
[root@localhost programs]# echo $filename
^tools^test^programs

目录
相关文章
|
2月前
|
Unix Shell Linux
LeetCode刷题 Shell编程四则 | 194. 转置文件 192. 统计词频 193. 有效电话号码 195. 第十行
本文提供了几个Linux shell脚本编程问题的解决方案,包括转置文件内容、统计词频、验证有效电话号码和提取文件的第十行,每个问题都给出了至少一种实现方法。
LeetCode刷题 Shell编程四则 | 194. 转置文件 192. 统计词频 193. 有效电话号码 195. 第十行
|
2月前
|
Shell Linux
Linux shell编程学习笔记30:打造彩色的选项菜单
Linux shell编程学习笔记30:打造彩色的选项菜单
|
23天前
|
运维 监控 Shell
深入理解Linux系统下的Shell脚本编程
【10月更文挑战第24天】本文将深入浅出地介绍Linux系统中Shell脚本的基础知识和实用技巧,帮助读者从零开始学习编写Shell脚本。通过本文的学习,你将能够掌握Shell脚本的基本语法、变量使用、流程控制以及函数定义等核心概念,并学会如何将这些知识应用于实际问题解决中。文章还将展示几个实用的Shell脚本例子,以加深对知识点的理解和应用。无论你是运维人员还是软件开发者,这篇文章都将为你提供强大的Linux自动化工具。
|
1月前
|
Shell
Shell编程(下)
Shell编程(下)
90 1
|
1月前
|
Shell Linux Windows
Shell编程(上)
Shell编程(上)
41 1
|
1月前
|
Shell Linux 开发工具
|
1月前
|
监控 Unix Shell
shell脚本编程学习
【10月更文挑战第1天】shell脚本编程
67 12
|
1月前
|
算法 Unix 数据安全/隐私保护
Python编程--UNIX口令破解机
Python编程--UNIX口令破解机
|
2月前
|
Shell Linux
Linux shell编程学习笔记82:w命令——一览无余
Linux shell编程学习笔记82:w命令——一览无余
|
2月前
|
存储 Unix Shell
shell脚本编程基础
【9月更文挑战第4天】
45 12