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

一,概述

变量的定义

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

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

变量是一种使用方便的占位符,用于引用计算机内存地址,该地址可以存储 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

9be4dfc08df68f2154a97a4ebd182053.png

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

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

2,用户级

vim ~/bash_profile

export a=1

09cd3b0c1ea2030b79bdde94f72256f5.png

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

4f4334a0a9a8ace0a8dcf3eaff36f1e6.png

3,系统级别

vim /etc/profile

export A=1

e9b05ec83b50935b6f82e9eada6b345f.png

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

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

8016e940349a39dd9664d9fbb2dbe69e.png

三,

1,修改命令提示符

fc48496b5c562c62789da2fa1582a4b6.png

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

2,脚本运行与PATH变量

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

bd18457ca7c2c66eda5444acda0eef2e.png####PATH赋值

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

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

四,变量名称的规范

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

变量名称格式

WESTOS_LINUX

Westos_Linux

westoS_Linux

9e5c14dead9184d0cf4239462c0d3af7.png####注意变量的命名规则

bc2098781b87f6e30f1a92de9509f76c.png####\是对空格的转义

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

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

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

79eec16f5138edaeb838dba24493e975.png

f27af060a74a635ab72e6c3fc9e1a598.png

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

3240e051df6a0d0f73435965f31407fc.png

五,数组

83c72a9fa5afdcde5a5fa29e20a8fbdb.png

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

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

六,变量值的传递

$0 是脚本本身的名字

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

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

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

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

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

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

$$ 是当前终端的PID

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

shell编程练习

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

c3ec4601223c73f34f2545ce018e218c.png

测试

616aed126b39a102609e91e781205f8e.png

成功!!!

注意: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表示打印提示

d213c3bc1253824e68e9e9525f425d35.png

[root@100 mnt]# sh test1.sh

123

$WESTOS is 123

4dddc43e9775dd70bf90dde616e36062.png

[root@100 mnt]# sh test1.sh

Please input a number: 123

$WESTOS is 123

6fd23cacdc4a79773d7c490592a4e079.png

[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建立用户,判断文件是否存在,交互式

2d5197e6e6338ad8df4419b9413f162b.png###echo 加颜色时要带上-e参数

测试:

80b418f7126ef0ee0e17e379fc275f6a.png

成功!!!

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

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

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

66ed24ea5a07330324becf43c72fbd5d.png

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

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

a48d6d0c6f878c5fb84a5c3af458aebb.png

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

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是否连通

ea8cc0245755950314e6f47b7cdbbb02.png

测试

[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退出

ce102b62c80a033a85c2fc5ecbbd459f.png

测试

[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,文件类型判断

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

8499227bbc6cd260f8401a922afa3950.png

#!/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,利用函数块实现创建,删除,退出的操作

04ad33742222c2a78e26468a03f2d5b9.png

注意:在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成功!!!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值