Shell变量

##变量定义:
变量即在程序运行过程中它的值是允许改变的量,变量是用一串固定的字符来标志不固定的值的一种方法,变量是一种使用方便的占位符,用于引用计算机内存地址,该地址可以存储scripts运行时可更改的程序信息。在shell 中变量是不可能永久保存在系统中的,必须在文件中声明。
##变量分类
在shell中变量分为环境级变量,用户级变量,系统级变量, 环境级变量只在当前shell中生效,shell关闭变量丢失, 用户级变量写在用户的骨文件中,只针对当前用户有效, 系统级变量被写在系统的配置文件/etc/profile中 变量即在程序运行时保存在内存中。 硬盘永久,内存临时的。
##变量的定义方法
环境级:
export A=1
用户级:
vim ~/.bash_profile
export A=1
系统级:
vim /etc/profile
export A=1
实验:

[root@desktop ~]# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
[root@desktop ~]# export a=1  //声明a=1,将其变成公共
[root@desktop ~]# echo $a
1
[kiosk@foundation69 Desktop]$ ssh root@172.25.254.169 -X
root@172.25.254.169's password: 
Last login: Sun Jun 19 02:25:43 2018 from 172.25.254.69
[root@desktop ~]# echo $a

[root@desktop ~]# vim .bash_profile  //编写用户配置文件
export a=2  //文件添加内容
[root@desktop ~]# source .bash_profile  //刷新
[root@desktop ~]# echo $a
2
[root@desktop ~]# su - student
Last login: Sun Jun 19 05:01:69 EDT 2018 on pts/1
[student@desktop ~]$ echo $a   //查看不到变量的值是因为是不同的shell环境,新的shell会加载不同的配置文件覆盖原来的

[student@desktop ~]$ exit
logout
[root@desktop ~]# vim /etc/profile  //编写系统配置文件
export a=3  //文件添加内容
[root@desktop ~]# source /etc/profile
[root@desktop ~]# echo $a
3
[root@desktop ~]# exit
logout
Connection to 172.25.254.169 closed.
[kiosk@foundation69 Desktop]$ ssh root@172.25.254.169 -X
root@172.25.254.169's password: 
Last login: Sun Jun 19 04:48:48 2018 from 172.25.254.69
[root@desktop ~]# echo $a  //查看到的是用户的配置文件变量
2

##临时修改路径

[root@desktop ~]# echo $PATH   //查看环境变量
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
[root@desktop ~]# ls /mnt/*
/mnt/file  /mnt/install_apache.sh  /mnt/passwd
[root@desktop ~]# chmod +x /mnt/*
[root@desktop ~]# install_apache.sh  11 //不能执行
bash: install_apache.sh: command not found...
[root@desktop ~]# PATH=$PATH:/mnt  //修改路径
[root@desktop ~]# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/mnt
[root@desktop ~]# install_apache.sh  12  //可以执行
the Listen is changed 
[root@desktop ~]# exit  //退出连接
logout
Connection to 172.25.254.169 closed.
[kiosk@foundation69 Desktop]$ ssh root@172.25.254.169 -X  //重新连接
root@172.25.254.169's password: 
Last login: Sun Jun 17 04:52:04 2018 from 172.25.254.69
[root@desktop ~]# chmod +x /mnt/*
[root@desktop ~]# install_apache.sh  //不能执行
bash: install_apache.sh: command not found...

##字符的转译变量的声明

““是弱引用,批量转译,不能转义”!”,"","`","$"
\代表单个字符,相当于’’
''是强引用,批量转译
$()变量声明,和``没有区别
$[]等同于(())
${}系统声明
echo 1+1 显示结果为1+1,其中1+1是可变长字符
echo $[1+1] 显示结果为2,是整形字符

实验:
这里写图片描述
##变量值传递

$1 脚本后所跟的第一串字符
$2 脚本后所跟的第二串字符
$3 脚本后所跟的第三串字符
$# 脚本后所跟的字符串个数
$* 后面跟的字符是一串,模式为" 1 2 3 "
$@ 后面跟的字符是三串,模式为"1" “2” “3”

实验:

[root@node1 mnt]# vim file.sh

文件内容如下:
这里写图片描述
执行如下:

[root@node1 mnt]# sh file.sh
$0 is file.sh
$1 is
$2 is
$3 is
$# is 0
$* is
$@ is
[root@node1 mnt]# sh file.sh hello
$0 is file.sh
$1 is hello
$2 is
$3 is
$# is 1
$* is hello
$@ is hello
[root@node1 mnt]# sh file.sh hello world
$0 is file.sh
$1 is hello
$2 is world
$3 is
$# is 2
$* is hello world
$@ is hello world
[root@node1 mnt]# sh file.sh hello world hi
$0 is file.sh
$1 is hello
$2 is world
$3 is hi
$# is 3
$* is hello world hi
$@ is hello world hi

##read交互式传参

read -s NAME //-s 表示加密,输入的时候看不到输入的字符
read -p “input:” NAME //-p 打印

实验:

[root@node1 mnt]# vim file.sh

文件内容:
这里写图片描述
这里写图片描述

题目:编写脚本,提示输入用户名和密码的存放文件,并判断文件是否存在,若不存在,提示不存在,若存在则建立用户
操作如下:
[root@node1 mnt]# vim user_create.sh

文件内容如下:
这里写图片描述
执行如下:
这里写图片描述
##系统命令别名的设定

alias xie=‘vim’ //临时设定命令别名
vim ~/.bashrc //永久设定用户级别的命令别名
alias xie=‘vim’
vim /etc/bashrc //永久设定系统级别的命令别名
alias xie=‘vim’
unalias xie //撤销设定

实验:

[root@node1 ~]# alias xie=vim  //临时设定命令别名
[root@node1 ~]# xie  //可以使用
[root@node1 ~]# alias
alias xie='vim'
[root@node1 ~]# exit  //退出
logout
Connection to 172.25.254.169 closed.
[kiosk@foundation69 Desktop]$ ssh root@172.25.254.169 -X  //重新连接
root@172.25.254.169's password: 
Last login: Wed Jun 20 10:26:15 2018 from 172.25.254.69
[root@node1 ~]# xie  //因为是临时的,故不能使用
bash: xie: command not found...
[root@node1 ~]# vim .bashrc  //永久设定用户级别的命令别名

文件内容如下:
这里写图片描述

[root@node1 ~]# source .bashrc   //刷新
[root@node1 ~]# su - student  //切换用户
Last login: Wed Jun 20 10:16:56 EDT 2018 on pts/0
[student@node1 ~]$ xie  //因为上面的是用户级别的设定故其他用户不能使用
bash: xie: command not found...
[student@node1 ~]$ exit
logout
[root@node1 ~]# vim /etc/bashrc  //永久设定系统级别的命令别名

文件内容如下:
这里写图片描述

[root@node1 ~]# source /etc/bashrc   //刷新
[root@node1 ~]# su - student
Last login: Wed Jun 20 11:29:44 EDT 2018 on pts/0
[student@node1 ~]$ xie  //可以使用
[student@node1 ~]$ exit
logout
[root@node1 ~]# vim .bashrc  //删除alias xie='vim'那行
[root@node1 ~]# vim /etc/bashrc //删除alias xie='vim'那行
[root@node1 ~]# source .bashrc  //刷新
[root@node1 ~]# source /etc/bashrc  //刷新
[root@node1 ~]# xie  //还可以使用
[root@node1 ~]# alias  //因为刷新没有覆盖掉这个设定
alias cp='cp -i'
alias egrep='egrep --color=auto'
alias fgrep='fgrep --color=auto'
alias grep='grep --color=auto'
alias l.='ls -d .* --color=auto'
alias ll='ls -l --color=auto'
alias ls='ls --color=auto'
alias mv='mv -i'
alias rm='rm -i'
alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'
alias xie='vim'
[root@node1 ~]# unalias xie  //撤销命令别名
[root@node1 ~]# alias  //设定已经撤销
alias cp='cp -i'
alias egrep='egrep --color=auto'
alias fgrep='fgrep --color=auto'
alias grep='grep --color=auto'
alias l.='ls -d .* --color=auto'
alias ll='ls -l --color=auto'
alias ls='ls --color=auto'
alias mv='mv -i'
alias rm='rm -i'
alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'
[root@node1 ~]# xie  //不能使用
bash: xie: command not found...

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

HOSTNAME=$(hostname)
HOSTNAME=`hostname`
$? //退出值,默认的退出值是命令在执行完成之后产生的退出值
退出值范围:[0-255],0表示正确,1表示错误,2表示方法不得当
退出值可以用exit命令执行,例如:exit 4 ,输入echo $? 时显示的是4

实验:
这里写图片描述

题目:编写脚本,提示输入ip,输出ping ip之后的退出值,通过退出值来判断ip是否存在,并输出判断结果
操作如下:
[root@node1 mnt]# vim ip_check.sh

文件内容如下:
这里写图片描述

[root@node1 mnt]# sh ip_check.sh
please input ip: 172.25.254.69
the exit is 0
172.25.254.69 is up
[root@node1 mnt]# sh ip_check.sh
please input ip: 172.25.0.69
the exit is 1
172.25.0.69 is down

##函数
脚本中的函数是把一个复杂的语句块定义成一个字符串的方法,可以确保命令的循环执行,简化脚本长度
格式:
Host_Message(){
命令
Host_Message //循环
}
Host_Message

题目:编写脚本,当执行脚本user_ctrl.sh时会循环提示:please input action,输入动作add后会提示输入用户名和密码并且执行建立用户,输入del后会提示输入要删除的用户名并删除用户,当输入exit后会退出
操作如下:
[root@node1 mnt]# vim user_ctrl.sh

文件内容:
1、第一种写法

这里写图片描述
2、第二种写法
这里写图片描述
执行脚本:

[root@node1 mnt]# sh user_ctrl.sh
please input action: add
please input username: haha
please input password:  
 haha is add!
please input action: del
please input the delete username: haha
haha is delete !
please input action: exit
bye
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值