基于linux下的shell变量以及函数调用

变量保存在内存;
变量记录在文件里,重启,让文件在内存中生效。
变量名称中通常包括大小写字母,数字,下划线(不是必须的)
变量名称格式:
WESTOS_LINUX
Westos_Linux
westoS_Linux

1)环境级变量:
运行脚本时,环境是独立的;
export 定义变量时,公共资源,运行脚本会看到内容;

当副级进程结束后,初始化进程root进程;
僵尸进程,一直占用资源,直至系统崩溃;

[root@desktop ~]# export westos=1   //声明
[root@desktop ~]# echo $westos
1
[root@desktop ~]# sh
sh-4.2# \echo $westos
1
sh-4.2# 

2)用户级变量:
当在root用户下文件定义export a=1;
运行时可以看到内存中a的值;
重新加载了配置文件,覆盖了原始文件;

vim ~/.bash_profile   
source .bash_profile

3)系统级变量:
vim /etc/ profile
source /etc/profile //手动刷新
示例:
实现用相对路径执行脚本(这是临时的,如果重启,设定会失效)

  chmod +x /mnt/*
  PATH=$PATH:/mnt
  echo $PATH

这里写图片描述
这里写图片描述
这里写图片描述
例如用户变量文件~/.bashrc中设定export a=1,系统变量文件/etc/profile中设定export a=3,如果重启主机,会发现执行echo $a命令时,显示为1;这是因为系统文件先被加载,用户级的配置文件后读取;

环境变量的设定方式:

“”批量
\ 转义单个字符;
‘’= \ 强引用,‘’可以引用所有字符,表示对字符进行转义;
“” 弱引用,批量转义“”中出现的字符,但是不能转义 “!” “\” “`” ” $ ”
\${} 变量声明
\$()所有版本通用,标准扩展接口

示例:

这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述

$[ ]=( ( ) ) 运算


变量值传递

$#  脚本后所根字符串的个数;
$*  默认后面的字符是一串;
$@  默认后面的字符是三串(独立的);
$1  脚本后的第一串字符串;
$2  脚本后的第二串字符串;
$3  脚本后的第三串字符串;

1)$*和$@的区别(脚本示例):

[root@desktop ~]# vim for.sh
    #!/bin/bash
    for name in "$@"
    do
        echo "$name"
    done
[root@desktop ~]# sh -x for.sh 

这里写图片描述

[root@desktop ~]# vim for.sh
    #!/bin/bash
    for name in "$*"
    do
        echo "$name"
    done
[root@desktop ~]# sh -x for.sh 

这里写图片描述
所以说$@后面跟的若干个字符是若干个;$*后面跟的若干字符是1个
2)脚本示例二:
文件创建用户,并修改密码完善(添加判断条件

vim /mnt/create_user.sh
    #!/bin/bash
    [ "$#" -ne "2" ]&&{
    echo "ERROR: please input userfile and passwordfile"
    exit 1
        }
    MAX_LINE=`awk 'BEGIN{N=0}{N++}{print N}' $1`       //利用数据报告生成器计算userfile的行数;
    for NUM in `seq 1 $MAX_Line`  //变量NUM从1循环到最大值
    do
        USERNAME=`sed -n ${NUM}p $1`  //利用sed对文件userfle进行逐行提取
        PASSWORD=`sed -n ${NUM}p $2`   
        useradd $USERNAME  //建立用户
        echo $PASSWORD | passwd --stdin $USERNAME  //修改密码
    done 

这里写图片描述


交互式变量传参

用read实现变量传递
-p 打印提示语
-s 加密

(1)

vim test4.sh
    #!/bin/bash 
    read -p "please input a number: " -s westos //打印提示语  -s 加密
    echo " "   //换行
    echo $westos   
sh test4.sh

这里写图片描述
(2)

vim test4.sh
    #!/bin/bash
    read -p "please input a number : " IP
    ping -c1 -w1 $IP &> /dev/null && echo $IP is up || echo $IP is down

这里写图片描述
(3)

vim /mnt/create_user.sh
    #!/bin/bash
    read -p "please input userfile:" USERFILE
    [ ! -e $USERFILE ]&&{
    echo "\033[32mERROR:$USERFILE is not exist!!\033[0m"
    exit 1
    }
    read -p "please input passfile:" PASSFILE
    [ ! -e $PASSFILE ]&&{
    echo "\033[32mERROR:$PASSFILE is not exist!!\033[0m"
    exit 1
    }

    MAX_LINE=`awk 'BEGIN{N=0}{N++}{print N}' $USERFILE`       //利用数据报告生成器计算userfile的行数;
    for NUM in `seq 1 $MAX_Line`  //变量NUM从1循环到最大值
    do
        USERNAME=`sed -n ${NUM}p $USERFILE`  //利用sed对文件userfle进行逐行提取
        PASSWORD=`sed -n ${NUM}p $PASSFILE`   
        useradd $USERNAME  //建立用户
        echo $PASSWORD | passwd --stdin $USERNAME  //修改密码
    done 

这里写图片描述

说明:
echo “\033[32mERROR:$USERFILE is not exist!!\033[0m”
这里是添加颜色的输出为了让效果可以明显;
格式是 ” \033[32m 内容 \033[0m “ ,详情请百度”如何给命令添加颜色“;


linux中系统别别名的设定

1)临时设定:
alias xie=’vim’ //设定vim的别名,即输入xie即可打开vim的功能
如果exit断开连接,那么临时设定失效,下次登陆,xie命令不能识别;
这里写图片描述
2)永久生效:
(用户级)
vim ~/.bashrc
alias xie=’vim’
source ~/.bashrc //刷新
alias //查看,是否有设置的别名;
但是,这种是在root的家目录下设置的,只对root用户生效;如果切换至student用户,那么xie命令不能识别;
这里写图片描述
这里写图片描述
这里写图片描述
(系统级)

vim /etc/bashrc
     alias xie='vim'
source /etc/bashrc
alias       

这里写图片描述

这种方式,是在系统的配置文件修改的,对所有可以登陆系统的用户都生效;如,切换至student用户,xie命令也是生效的;

3)unalias xie; //撤销命令的别名:
虽然把文件信息删除之后,内存中还会存在别名设定的信息,所以刷新之后还会有alias xie存在;


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

$? 是命令在执行完之后产生的退出值,范围为[0-255]
当$0=0,时表示命令执行没有错误输出,这个值可以用ecit 命令执行。

echo $? //查看退出值(0-255)
0 正确
1 命令执行的错误
2 方法不正确

示例 1:
利用echo $?返回退出值来判断是否ip 可以ping通;

[root@desktop mnt]# vim /mnt/ip_check.sh
    #!/bin/bash
    ping -c1 -w1 $1 &> /dev/dull
    NUM=`echo $?`
    [ "$NUM" == "0" ]&&{
        echo " $1 is up! "
        exit 1
    }||{
        echo " $1 is down!"
        exit 1
    }
[root@desktop mnt]# sh /mnt/ip_check.sh 172.25.254.74

这里写图片描述


脚本函数的调用

函数的优点:
1)循环执行;
2)简化脚本内容;
3)可读性更高;

示例 1:
要求:执行脚本回车,提示动作,输入add,建立用户,回车,输入密码;输入del,删除用户;如果输入exit;退出;

vim /mnt/create_user.sh
    #!/bin/bash
    ACTION_ADD()
    {
            [ "$1" == add ] && {
                    read -p "please input a username: " USERNAME
                    read -p "please input a password: " -s PASSWORD
                    useradd $USERNAME
                    echo  -e "\033[31mthe users has created successfully!\033[0m"
                    echo $PASSWORD | passwd --stdin $USERNAME
            }
    }
    ACTION_DEL()
    {
            [ "$1" == del ] && {
                    read -p "please input a username: " USERNAME
                    userdel -r $USERNAME
                    echo -e "\033[31m the user has deleted!\033[0m"
            }
    }
    USER_CTL()
    {
            read -p "please input action(add or del): " ACTION
            [ "$ACTION" == exit ] && {
                    echo -e "\033[31mbye\033[0m"
                    exit 0
            }
            ACTION_ADD $ACTION
            ACTION_DEL $ACTION
            USER_CTL
    }
    USER_CTL

这里写图片描述
示例 2:
实现对主机ip的网络ping检测循环不间断,直至输入exit才会退出;
这里写图片描述
这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值