Shell 编程——变量

 变量类型:   ①字符型

②数值型

③整数型

④浮点型

⑤布尔型

Shell属于弱类型编程语言——数据类型可以被忽略的语言。它与强类型定义语言相反, 一个变量可以赋不同数据类型的值。

Bash变量类型:  ①环境变量

②本地变量

③位置变量

④特殊变量

本地变量

引用本地变量${abc}时花括号有时可以省略。若变量后紧跟着其他字符,如${ABC}S,则不能省略。

变量的赋值方式:

本地变量:VAR=VALUE     作用域为整个bash进程

局部变量; local VAR=VALUE     作用域为当前代码段

环境变量: export VAR=VALUE 作用域为当前shell进程及其子进程

位置变量:$1,$2……

特殊变量:

$?:保存上一个命令的执行状态返回值,程序状态的返回码0—255之间,

0表示正确执行,1—255都表示错误执行,1、2、127为系统预留。

$#:参数的个数

$*:参数的列表

[email protected]:参数的列表

$$ :Shell本身的PID(ProcessID)

撤销变量:unsetVAR

查看当前shell中的变量: set

查看当前shell中的环境变量:printevn、evn、export

Shell编程——条件判断

条件测试类型:  ①整数测试

②字符测试

③文件测试

表达式:[expression ] 、[[ expression ]] 、test expression

注:表达式和[  ]之间一定要有空格

整数比较:

-eq :测试两个整数是否相等,如[ $A –eq $B ],相等为真,不等为              假。

-ne : 测试两个整数是否不相等,不相等为真,相等为假。

-gt : 测试一个整数是否大于另一个,大于为真,小于等于为假。

-lt : 测试一个整数是否小于另一个,小于为真,大于等于为假。
     -ge:测试一个整数是否大于等于另一个整数,大于等于为真,小             于为假。

-le:测试一个整数是否小于等于另一个整数,小于等于为真,大                     于为假。

逻辑与:&&

逻辑或:||

例:如果用户user不存在,就添加用户。

#   !id user && useradd user

或者id user  ||  useradd user (注:逻辑与前面为真后面命令不执行)

变量命名规则:1只能包含字母、数字和下划线,并且不能以数字                                        开头;

                                 2不应该和系统中已有的环境变量重名

3做到见名知意

例:如果/etc/inittab大于100行,则是大文件。

#!/bin/bash

LINES=`wc–l /etc/inittab`

#echo$LINES

FINLINES=`echo$LINES|cut –d ‘ ’ –f1`

#echo   $FINLINES

[$FINLINES –gt 100 ] && echo “it is a big file !” || echo “it is a small file !”

例:如果用户不存在,添加用户并且设定密码;否则,显示用户已           存在。

!id  user1 &&  useradd  user1 &&  echo  “user” |passwd –stdin user1  ||  echo “user1 is existing!”

脚本实现:

#!/bin/bash

read -p "Enter userID: "ID

! id $ID && useradd $ID&& echo $ID | passwd --stdin $ID ||echo "$ID is existing !"

可以加入/dev/null

自我练习:

#!/bin/bash

if [$# -ne 2 ];then

echo ‘参数错误!‘

exit 3

fi

if [$1 – eq $2 ];then

echo “$1 等于$2”

exit 4

fi

if [$1 –gt $2 ];then

echo “$1大于$2”

exit 5

fi

if [$1 –lt $2 ];then

echo “$1小于$2”

exit 6

fi

单分支if语句:

if 条件判断; then

statement1

statement2

……

fi

双分支的if语句:

if 判断条件;then

statement1

……

else

statement2

……

fi

例:如果用户UID为0,那么现实为管理员,否则,现实为普通用户。

#!/bin/bash

NAME=users                                          #改为read –p “ID:”NAME 实现交互

If

[ `id –u $NMAE` -eq 0 ]

then

echo       “Adminitrator!”

else

echo“Commonuser!”

fi

增加判断用户是否存在:

#!/bin/bash

read-p "ID:" NAME

if

[ `id -u $NAME` ]                             #注意要加反引号!或者直接写成  id –u $NAME

then

if

[ `id -u $NAME` -eq 0 ]

then

echo "Admin"

else

echo "Common user"

fi

else

echo " This user not exist!"

fi

shell中进行算术运算:1   let   如let C=$A+$B

2     $[ $A+$B ]

3     $(($A+$B))

4     expr如C=`expr $A+$B`

exit :退出脚本。exit后面可以加数字0-255之间。如果没有定义命

令状态码,就是exit后面的数字。那么最后执行的命令的状态

码即为脚本的状态码。

if ……;then如果if后面不加[ ],那么if直接判断状态码,如

if     grep ……。

文件测试:

-e file:测试文件是否存在

-f file:测试文件是否问普通文件

-d file:测试指定路径是否为目录

-r file:测试文件对当前用户是否有读权限

-w file:测试文件对当前用户是否有写权限

-x file:测试文件对当前用户是否有执行权限

例:如果文件不存在则推出脚本

#!/bin/bash


注:if后面为假,则then后面就不执行。所以文件不存在,!取反,则then后面执行

FILE=/etc/inittab

if [ !–e $FILE ];then

echo “NOFILE!”

exit 8

fi

多分支if语句:

if 判断1;then

statement1

……

elif 判断2;then

statement2

……

elif ……

else

statementN

fi

例:输入一个文件路径,测试文件是否存在。

#!/bin/bash

if  [$# -lt 1 ] || [ $# -gt 1 ];then

echo “NO Parameters !”

exit  7

fi

if     [      -e $1       ];then

echo        “OK!”

else

echo        “NO Files !”

fi

shift : 轮替后面可加数字,表示轮替多少个

例:

#!/bin/bash

echo$1

shift

echo$1

执行:./X.sh  1     2

显示结果为:              1

2

若改成shift 2

则./X.sh  1 2 3

则显示:      1

3

字符测试:

                     == 是否相等,相等为真

!=    是否不相等,不相等为真

>     大于

<     小于

-zstring :测试指定字符串是否为空,空则真

-nstring  :测试指定字符串是否为不空,不空为真

例:[ `id –n –u$1` == `id –n –g $1`]

飞bc:计算器

scale=N ,表示保留几位精度

例: echo “scale=2;111/22;”|bc

或者 bc<<< “scale=2;111/22;”

 

:传递三个参数给脚本,第一个为整数,第二个为算术运算符,第三个为整数,将计算结果保留两位精度。

#!/bin/bash

echo`bc <<< “scale=2;$!$2$3”`

例:传递三个参数给脚本,参数均为用户名,将这些用户的账号信息提取出来放置于/tmp/test中,并且需求每一行行首有行号。

egrep “$1|$2|$3” /etc/passwd >>/tmp/a

cat –n /tmp/a > /tmp/test

rm –rf a

shell循环:要有进入条件,退出条件:for、while、until

1 for 变量 in 列表 ;do

循环体

done

生成列表:{ 1..N}、`seq 起始数步进数 结束数`

declare :声明变量类型

-i:整型

-x:声明为环境变量

例:求1到100的和

#!/bin/bash

declare  -i SUM=0

for I in {1..100};do

SUM=$[$SUM+$I]

done

echo “The SUM is :$SUM。”

例:比较三个数的大小

echo -n "Enter three number:"

read a b c

if [ $a -gt $b ];then

t=$a;a=$b;b=$t;

fi

if [ $a -gt $c ];then

t=$a;a=$c;c=$t;

fi

if [ $b -gt $c ];then

t=$b;b=$c;c=$t;

fi

echo "From small to big:$a,$b,$c"

例:给每个用户发送hello

#!/bin/bash

for I in `cat /etc/passwd|cut –d: -f1` ;do

echo“hello,$I”

done

例:依次向/etc/passwd中的每个用户问好,并显示对方的shell,只想默认shell为bash的用户问好。

#!/bin/bash

for I in `cat /etc/passwd |grep ‘bash‘`;do

echo"hello `echo $I |cut -d: -f1` your bash"

done

例:添加10个用户user1~user10,密码同用户名,要求只有用户不存在的情况下才能添加

扩展,接受一个参数,参数为add时添加用户,当参数是del时,删除用户,其他参数则退出。

#!/bin/bash

if [ $1 == add];then

for I in{1..10};do

! id user$I &&useradd user$I -puser$I

done

elif [ $1 == del];then

for I in {1..10};do

id user$I >/dev/null &&userdel user$I

done

else

echo "paramiter wrong"

fi

例:分别显示当前系统上所有默认shell为bash的用户和默认shell为nologin的用户,并统计各类shell的用户总数如:there have 3 users,they name is ……

#!/bin/bash

for I in `grep‘bash‘ /etc/passwd|cut -d: -f1`;do

A="$A $I"

done

echo "users`grep ‘bash‘/etc/passwd|wc -l`name is $A"

或者直接用把用户名cut出来赋予一个变量得到的结果“user1 user2 user3”,而且没有格式错误。

时间: 2024-10-11 20:44:52

Shell 编程——变量的相关文章

Linux Shell编程变量赋值和引用

我们可以使用任意一种文字编辑器,比如gedit.kedit.emacs.vi等来编写shell脚本,它必须以如下行开始(必须放在文件的第一行): #!/bin/sh ... 注意:最好使用“!/bin/bash”而不是“!/bin/sh”,如果使用tc shell改为tcsh,其他类似. 符号#!用来告诉系统执行该脚本的程序,本例使用/bin/sh.编辑结束并保存后,如果要执行该脚本,必须先使其可执行: chmod +x filename 此后在该脚本所在目录下,输入 ./filename 即可

Linux_10------Linux之shell编程------变量

shell编程是为了简化管理操作. 1.base变量与变量分类 base是Linux的标准shell. base变量set:查询系统下所有环境变量env: 查看系统下环境变量unset:删除变量a.什么是变量与变量分类 变量由字母和下划线开头,由字母下划线数字组成. 变量名的长度不超过255个字符. 变量名在有效范围内必须是唯一的. 在base中,变量的默认类型都是字符串型. 变量按照存储数据类型分类:字符串型.整型.浮点型.日期型. 变量的分类: 用户自定义变量,变量自定义的: 环境变量,保存

shell编程—变量(三)

在shell脚本中,变量分两种,系统变量和自定义变量. 系统默认变量是系统自带的一些变量,如path为路径变量 用户自定义变量为在编写吧脚本的时候自己定义的一些变量 变量名命名规则 首个字符必须为字母“a-z和A-Z” 中间不能有空格,但是可以使用下划线“_” 不能使用标点符号 不能使用bash中的关键字 变量名和等号之间不能有空格 只读变量 将变量定义为只读变量时用readonly命令 编辑文件如下: 结果如下: 删除变量 使用unset命令进行删除 语法:unset 变量名 变量被删除后不能

shell编程变量及变量类型

编程语言:包括机器语言.汇编语言.{高级语言[静态语言(编译型语言,一般为强类型变量,需要发布为可执行程序,C.C++.Java,C#)和动态语言(解释型语言,一般为弱类型语言,不需要发布为可执行程序,是一边执行一边解释,Asp,asp.net,php,shell,python.perl)]} 面向对象:解决对象之间的动作,主要适合开发大型程序java,python,c++,perl 面向过程:主要解决过程,主要适合开发小型程序shell,c 变量:是内存空间,是命名的内存空间,存储数据的存储格

linux shell编程 变量引用

shell共三个引用符号,双引号,单引号和反引号`(在英文状态下tab键之上,1键之左的那个键). 双引号"":引用除了美元符号$,反引号`和反斜杠\之外的所有字符. 单引号'':引用所有的字符. 反引号``:shell将反引号中的内容解释为系统的命令. 反斜杠\:转义符号,屏蔽下一个字符的特殊含义. 一个变量加不加双引号在一般情况下是一样的,比如: num=10 echo $num echo "$num" 这两个会打印出相同的内容. str="X    

shell编程--变量

一.定义变量 定义变量名是不加$符(与PHP不同,与Python相同),变量名和“=”之间不加空格(特殊,与其他语言不同) 例:x="hello world" 注:变量名的命名须遵循如下规则: 首个字符必须为字母(a-z,A-Z). 中间不能有空格,可以使用下划线(_). 不能使用标点符号. 不能使用bash里的关键字(可用help命令查看保留关键字). 引用一个定义过的变量需要加$符 如: x="hello world" echo ${x} 二.只读变量 用rea

第二章 Shell编程之变量

Shell编程之变量 一 Bash变量与变量分类 Bash是Linux中的标准Shell,因此经常称Bash为Shell. 1. 变量命名规则 变量名可以由字母.数字.下划线组成,但必须以字母与下划线开头: 变量名的长度不能超过255个字符: 变量名在有效范围必须唯一: 在Bash中,变量的默认类型都字符串型: 2. 变量按照存储类型分类 默认类型是字符串型. 字符串型,赋值时单双引号皆可: 整形: 浮点型: 日期型: 二 用户自定义变量 变量名与变量值都是用户自定义的,就是说可以由用户控制修改

《跟老男孩学Linux运维之shell编程实战》-第二章 shell变量的核心基础

这篇文章主要讲解 shell变量的核心基础. 1.变量是什么? 变量是什么?可能有好多人不明白,简单地说,变量就是用一个固定的字符串(也可能是字符.数字等的组合)代替更多.更复杂的内容,该内容里可能还会包含变量.路径.字符串等其他的内容. 变量的赋值方式为:先写变量名称,紧接着是"="这个字符,最后是值,中间无任何空格(变量的内容一般要加双引号,以防止出错,特别是当值里的内容之间有空格时). 如何打印变量?通过echo命令加上$变量名 打印变量的值: 例如:定义变量和打印变量: [[e

Bash Shell脚本编程-变量知识

Shell:GUI  CLI 提供交互式接口:提高效率 命令行展开:~ ,{} 命令别名:alias 命令历史:history Globbing:*,?,[],[^] 命令补全:$PATH指定的目录下 路径补全:TAB键 管道:| 输入输出重定向:>    >> 提供编程环境: bash自动运行脚本机制 面向过程(以指令为中心组织数据)的编程模型 脚本编程 输入指令解决问题 程序是语句和表达式组成的 运行时根据一定流程来执行: 顺序执行 选择执行 循环执行 程序是指令+数据的 面向对象(