一,概述

变量的定义

变量即在程序运行过程中它的值是允许改变的量

变量是用一串固定的字符来标示不固定的值的一种方法

变量是一种使用方便的占位符,用于引用计算机内存地址,该地址可以存储 Script 运行时可更改的程序信息

在 shell 中变量是不能永久保存在系统中的,必须在文件中声明在 shell 脚本中变量的种类

变量的分类

在 shell 中变量分为环境级变量,用户级变量,系统级变量

环境级变量只在当前shell中生效,shell关闭变量丢失

用户级变量写在用户的骨文件中(~/bash_profile),只针对当前用户生效

系统级变量被写在系统的配置文件/etc/profile 或者 /etc/profile.d/ 中,对于所有用户都生效

二,shell 脚本中变量的定义方法

1,环境级

export A=1

在系统的用户在终端自定义的变量是不能直接拿到脚本里面使用的,因为运行脚本时相当于在终端里面又打开了一个shell,这俩环境不一样,需要把原来的变量提升到环境变量级别,才可以使用。

[root@100 mnt]# vim file.sh

[root@100 mnt]# cat file.sh

#!/bin/bash

echo $a

[root@100 mnt]# a=1

[root@100 mnt]# echo $a

1

[root@100 mnt]# sh file.sh        值为空

[root@100 mnt]# export a=1        提升至环境变量

[root@100 mnt]# sh file.sh

1

可以看到脚本是2343这个进程的子进程,事实上直接输入sh就会打开一个shell

而且这种在命令行提升的方法在其他终端无法使用,因为环境不一样了,export只对当前环境有效

2,用户级

vim ~/bash_profile

export a=1

source 命令是重新加载,并且这种写在文加里面的方法不受用户终端环境的影响,但是只对该用户有效

3,系统级别

vim /etc/profile

export A=1

注意:修改之后一定要source重新加载文件

env可以查看系统的全部变量

三,

1,修改命令提示符

\u表示当前用户 \h表示主机名 \W表示相对路径 \w表示绝对路径

2,脚本运行与PATH变量

###虽然有可执行权限,但是不能直接运行

####PATH赋值

####执行成功,但是这种赋值是一次性的,当环境改变时就失效了

永久有效需要在/etc/profile写入export PATH=$PATH:脚本的绝对路径  同时source重新加载文件

四,变量名称的规范

变量名称中通常包含大小写字字母,数字,下划线(不是必须)

变量名称格式

WESTOS_LINUX

Westos_Linux

westoS_Linux

####注意变量的命名规则

####\是对空格的转义

###单引号就是\的批量,\是单个转义,''是批量转义

###双引号不可以引号! $ \ ``!

###单引号可以随便引,所见即所得,动词变名词

注意:当变量和常量在一起是,可以用{ }将变量引起来

五,数组

##目前的版本中$()完全等于``,都是先执行里面的然后赋值给变量

这里将ls的执行结果赋给haha,echo $haha其实就是打印数组的第0个值

六,变量值的传递

$0 是脚本本身的名字

$1 脚本后的第一串字符串

$2 脚本后的第二串字符串

$3 脚本后的第三串字符串

$# 脚本后所跟字符串的个数

$* 脚本后跟的所有字符串,模式为“ 1 2 3 ”

&@ 脚本后跟的所有字符串,模式为“ 1”“2”“3

$$ 是当前终端的PID

###注意这个$*实际上是一串字符

shell编程练习

给定userfile和passwdfile建立用户,要求脚本后面跟这俩文件名,输入不够时报错

测试

成功!!!

注意:for循环中的NUM变量通常也用NUM=`awk 'BEGIN{n=0}{N++}END{print N}' $1`,这样只需要一条命令

用 read 实现变量传递

read  WESTOS  没有任何提示,直接输入

read -p "input: "  -s  WESTOS   -s表示加密,不显示输入内容

read -p "input: "   WESTOS   -p表示打印提示

[root@100 mnt]# sh test1.sh

123

$WESTOS is 123

[root@100 mnt]# sh test1.sh

Please input a number: 123

$WESTOS is 123

[root@100 mnt]# sh test1.sh

Please input a number: $WESTOS is 123            注意这里-s加密了,不显示,echo的内容直接显示了,可以写上echo " "

编程练习

1,判断某ip是否连通,交互式

[root@100 mnt]# vim ip_check.sh

[root@100 mnt]# cat ip_check.sh

#!/bin/bash

read -p "Please input a number: " IP       通过read实现参数的传递

ping -c1 -w1 $IP &> /dev/null && echo $IP is up || echo $IP is down

[root@100 mnt]# sh ip_check.sh

Please input a number: 172.25.254.2

172.25.254.2 is down

[root@100 mnt]# sh ip_check.sh

Please input a number: 172.25.254.156

172.25.254.156 is up2,通过userfile和passwdfile建立用户,判断文件是否存在,交互式

###echo 加颜色时要带上-e参数

测试:

成功!!!

七,linux 系统中命令别名的设定

alias可以查看系统存在的别名

alias write='vim' 设定系统别名,输入write时就会打开vim编辑器

这样的只是一次性的,永久有效需要写在~/.bashrc下面(只针对该用户有效)或/etc/bashrc下面(对所有用户有效),需要source重新加载

##取消alias别名,注释掉文件里面的信息 source重新加载 unalias 别名

八,利用命令执行结果设定变量

Hostname=$(hostname)

Hostname=`hostname`

$?

$? 是命令在执行完成之后产生的退出值

范围是 [0-255]

当 $?=0 时标示命令执行没有错误输出

这个值可以用 exit 命令执行 .

例如 exit 66

[root@100 mnt]# ls

file.sh multiuser passwd test1.sh userfile

ip_check.sh nfsshare passwdfile user_add.sh

[root@100 mnt]# echo $?        ls命令执行成功

0

[root@100 mnt]# hahahha        不存在hahahha这条命令,所以失败

bash: hahahha: command not found...

[root@100 mnt]# echo $?

127

0表示成功(Zero - Success)

非0表示失败(Non-Zero  - Failure)

2表示用法不当(Incorrect Usage)

127表示命令没有找到(Command Not Found)

126表示不是可执行的(Not an executable)

>=128 信号产生

shell编程练习

用返回值的方法判断某ip是否连通

测试

[root@100 mnt]# sh ip_check.sh

Please input a number: 172.25.254.11

172.25.254.11 is up

[root@100 mnt]# sh ip_check.sh

Please input a number: 172.25.254.156

172.25.254.156 is up

成功!!!九,脚本中的函数

脚本中的函数时把一个复杂的语句块定义成一个字符串的方法

Host_Message()

{

xxxxxxxxxxxx

xxxxxxxxxxxx

Host_Message   在函数块里面调用函数

}

Host_Message

shell编程练习

1,利用函数块的方式写脚本,判断ip是否连通,直到输入exit退出

测试

[root@100 mnt]# sh ip_check.sh

Please input a number: 172.25.254.11

172.25.254.11 is down

Please input a number: 172.25.254.156

172.25.254.156 is up

Please input a number: exit

bye

成功!!!

2,文件类型判断

注意函数的参数和脚本的参数是不一样的

#!/bin/bash

FILE_CHECK()

{

[ "$1" "$2" ] && {        ####注意这里的$1对应参数-d或-f ,$2对应参数$1(从外部获取),$3对应directory或file

echo $2 is $3

exit 0

}

}

[ -e "$1" ] || {

echo $1 is not exist!!!

exit 0

}

FILE_CHECK -d $1 directory   ####这里调用了FILE_CHECK函数,有三个参数-d和$1,directory,$1从外部获取内容,这三个参数分别对应函数里面的变量$1,$2和$3

FILE_CHECK -f $1 file

测试

[root@100 mnt]# sh -x file.check.sh /etc

+ '[' -e /etc ']'

+ FILE_CHECK -d /etc directory

+ '[' -d /etc ']'

+ echo /etc is directory

/etc is directory

+ exit 0

[root@100 mnt]# sh file.check.sh /etc/passwd

/etc/passwd is file成功!!!

3,利用函数块实现创建,删除,退出的操作

注意:在ACTIONS函数块里面,可以不用做"$ACTION" = "add" 的判断,可以作为参数 ADD $ACTION;DEL $ACTION,然后在函数块ADD和DEL里面做判断

测试

[root@100 mnt]# sh action.sh

Please input a action: add

Please input a username :haha

Please input a passwd :haha123

Changing password for user haha.

passwd: all authentication tokens updated successfully.

Please input a action: del

Please input a username haha

Please input a action: exit

bye成功!!!

linux中的变量前加__user,linux中的环境变量,别名,变量传递和函数块相关推荐

  1. java变量前加private_类中private变量真的private么?

    内容简介 利用反射机制修改类中的private修饰的变量(当然,在没有提供setter的情况下). 本篇主要讲述了如何利用反射机制修改类中的一个private变量.下一篇将会展示利用反射机制来违反或者 ...

  2. python中类的方法里面变量前加self与不加self的区别

    1.最近在执行一个UI自动化脚本登录网站时遇到一个很奇葩的问题:运行脚本后chromedriver会驱动浏览器打开网站执行脚本里面的一系列界面操作,操作完后浏览器自动关闭了(重点就在这里,我明明没有调 ...

  3. java中关于++x前加加和x++后加加的疑惑!

    java中关于前加加和后加加的疑惑! 大家看下面的代码和截图(运行结果在截图中可以看到),不知道会不会跟我一样的感觉,会不会觉得自己对前加加和后加加的知识点还没学懂呢? 我甚至都一度怀疑是不是自己理解 ...

  4. Linux给每个数据后边加逗号,Linux awk如何将文件某列按照逗号分隔-逗号分隔值文件...

    Linux开发技术如今在企业中很受重视,有不少的企业很关注Linux开发程序员,因此参加Linux培训学习的小伙伴也在不断地增加.本篇文章小编就给读者们分享一下Linux awk如何将文件某列按照逗号 ...

  5. python读取单元格前几个字的值_EXCEL表格中怎么取前一单元格中的前几个字符

    展开全部 截取单元格中前几个字符可以使用LEFT函数.LEFT从文本字符串62616964757a686964616fe4b893e5b19e31333366303138的第一个字符开始返回指定个数的 ...

  6. linux在目录前加前缀,linux中批量添加文件前缀的操作方法

    需要在文件夹内所有txt文件的文件名前面添加"gt_"; 就是由原来的文件"xxx.txt"变成"gt_xxx.txt": 网上搜来的脚本如 ...

  7. oracle中变量前加冒号_oracle变量的定义和使用【转】

    在程序中定义变量.常量和参数时,则必须要为它们指定PL/SQL数据类型.在编写PL/SQL程序时,可以使用标量(Scalar)类型.复合(Composite)类型.参照(Reference)类型和LO ...

  8. Linux中ls查看前十个文件,linux ls命令的20个实用范例

    Linux中一个基本命令是ls.没有这个命令,我们会在浏览目录条目时会遇到困难.这个命令必须被每个学习Linux的人知道.接下来是小编为大家收集的linux ls命令的20个实用范例,欢迎大家阅读: ...

  9. linux批量在文件名前面加前缀,linux中批量添加文件前缀的操作

    linux中批量添加文件前缀的操作 需要在文件夹内所有txt文件的文件名前面添加"gt_"; 就是由原来的文件"xxx.txt"变成"gt_xxx.t ...

最新文章

  1. Useful Shell Option – extglob 和 shopt命令
  2. LoadRunner系统架构简介与运行原理
  3. python template用法_python中Template的使用介绍
  4. boost::safe_numerics::base_type相关的测试程序
  5. OpenCV使用神经网络检测颜色检查器
  6. rabbitmq订单模块_RabbitMQ播放模块! 构架
  7. 快速入门PyTorch(3)--训练一个图片分类器和多 GPUs 训练
  8. catia需要java插件,catia中的带分析
  9. JavaScript 造就年薪超过 10 万美元的开发者们!
  10. SpringMVC学习(七)使用JSON传递数据、jackson和fastjson的使用、处理JSON传输的乱码问题
  11. paip.验证码识别---分割.--使用投影直方图
  12. 手把手从零开始学习树莓派教程
  13. 神策分析 Android SDK 之用户路径采集
  14. html5 go语言运行环境,GO语言环境搭建 及 helloworld开发
  15. 基于jsp+mysql+java+ssm实验室设备管理系统——计算机毕业设计
  16. cydia软件路径_Cydia源目录结构解析
  17. *****DOS·FOR·语句·学习·指南*****
  18. APP项目的开发流程
  19. 利用keras搭建基础模型莺尾花
  20. 有关c基础指针需要注意的几个点!

热门文章

  1. javaWEB的三大组件(入门基础总结)
  2. python3.6安装opencv3_python3.6.5安装opencv3
  3. mysql临时表怎么显示_如何查看MySQL临时表的说明?
  4. python语言提供的三个基本数据类型是_python基本数据类型
  5. linux运维解决ddos,运维人员该如何排查并解决DDOS攻击
  6. 偷的名表卖掉能查到吗_搬运工偷走房主30万名表,转手以12.5万卖掉 南京警方快速追回...
  7. linux怎么打开.o文件,Linux下文件I/O操作的相关知识
  8. 三点滑动平均法怎么计算的_孔径千分尺怎么用,能看懂吗?
  9. html5表单修改颜色,在css中更改输入搜索表单的背景色
  10. OpenShift Security (3) - 准备客户端环境和演示应用