zoukankan      html  css  js  c++  java
  • shell脚本基础1 概述及变量

    shell概述:
    在linux内核与用户之间的解释器程序
    通常指/bin/bash
    负责指向内核翻译及传达用户/程序指令
    相当于操作系统的“外壳”

    shell的使用方式:
    交互式——命令行:人工干预,智能化程度高,逐条解释执行,效率低
    非交互式——脚本:需要提前设计,智能化难度大,批量执行,效率高,方便在后台静悄悄的运行

    切换shell环境:
    通过usermod ,chsh更改登陆shell
    手动执行目标shell程序
    [root@ceshiji ~]# cat /etc/shells
    /bin/sh (多数unix默认的shell)
    /bin/bash (多数linux默认使用的shell)
    /sbin/nologin (非登陆shell)
    /bin/dash
    /bin/tcsh
    /bin/csh
    /bin/ksh

    bash基本特性:
    命令行环境回顾
    快捷键,tab键补齐
    命令历史
    命令别名
    标准输入输出
    重定向
    管道操作

    /etc/profile (环境变量和启动程序)
    /etc/bashrc (函数和别名)
    /root/.bash_profile
    /root/.bashrc


    编写及执行脚本:
    #!/bin/bash
    for i in {1..10}
    do
    useradd hydra$i 2>>uerror.log >/dev/null
    echo "123" |passwd --stdin user$i 2>>perror.log >/dev/null
    done

    添加执行权限:
    [root@ceshiji ~]# chmod +x x.sh
    [root@ceshiji ~]# ./x.sh
    hail hydra!!!!!

    没授权时执行:(因为解释器权有权限)
    [root@ceshiji ~]# chmod -x x.sh
    [root@ceshiji ~]# bash x.sh
    [root@ceshiji ~]# sh x.sh
    (以上两个开子进程)
    [root@ceshiji ~]# source x.sh
    [root@ceshiji ~]# . x.sh
    (以上两个不开子进程)

    脚本规范思路:
    #!脚本声明(使用哪种解释器)
    #注释信息(步骤,思路,用途,变量含义等)
    可执行的语句

    脚本创建:
    新建文本文件
    添加可执行的脚本语句(命令行)
    添加x权限
    [root@ceshiji ~]# vim x.sh (创建文件)
    #!/bin/bash (声明解释器)
    #步骤,思路,用途,变量含义
    echo "hail hydra!!!!!" (写脚本语句)
    [root@ceshiji ~]# chmod +x x.sh (添加执行权限)
    [root@ceshiji ~]# ./x.sh
    hail hydra!!!!!

    ——————————————————————————————

    shell变量是弱类型的变量

    变量:
    变量名称=值
    变量名称:字母,数字,_,但不能以数字开始

    定义/赋值变量
    变量名=变量值
    [root@ceshiji ~]# x=12 定义变量x,赋值12
    [root@ceshiji ~]# var1=redhat 定义变量var1,赋值redhat
    相关注意事项:
    若指定的变量名已存在,相当于为此变量名重新赋值,
    等号两边不要有空格
    变量名由字母/数字/下划线组成,区分大小写
    变量名不能以数字开头,不要使用关键字和特殊字符

    防止冲突可以用花括号(区分大小写)
    $变量名
    ${变量名}
    [root@ceshiji ~]# a=7

    查看变量的值:
    echo $变量的名称
    [root@ceshiji ~]# echo $a
    7

    取消变量:
    unset 变量的名称
    [root@ceshiji ~]# unset a
    [root@ceshiji ~]# vim b.sh
    #!/bin/bash

    useradd $1 (($1变量 $2变量)
    echo "$2" |passwd --stdin $1

    [root@ceshiji ~]# ./b.sh hydra Anonymous
    更改用户 hydra 的密码 。
    passwd: 所有的身份验证令牌已经成功更新。

    变量的作用范围
    局部变量:
    新定义的变量默认只在当前shell环境中有效
    无法在子shell环境中使用

    全局变量:
    在当前shell及子shell环境中均有效
    使用export可将局部变量申明为全局变量

    变量的分类:
    环境变量:变量名通常都是大小写,油系统维护,用来设置工作环境
    位置变量:bash内置,存储执行脚本时提供的参数
    预定义变量:bash内置,一类有特殊用途的变量,可直接调用,但不能直接赋值或修改
    自定义变量:由用户自主设置,修改及使用


    变量配置文件
    /etc/profile ~/.bash_profile
    相关操作
    env:列出所有的环境变量
    set:列出所有变量
    常见的环境变量:
    PWD PATH USER LOGNAME UID SHELL HOME PS1 PS2.... ....

    预定义变量:
    用来保存脚本程序的执行信息
    直接使用这些变量,不能直接为这些变量赋值
    变量名:
    $0:当前所在的进程或脚本名
    $$:当前运行进程的pid号
    $?:命令执行后的返回状态,0正常,非0表示失败
    $#:已加载的位置变量的个数
    $*:所有位置变量的值

    位置变量:
    在执行脚本时提供命令行参数
    表示为$n,n为序号
    $1,$2,... ..${10},${11},...
    [root@ceshiji ~]# vim c.sh
    #!/bin/bash
    echo $1 ${10} (查看第1,10个位置参数)
    [root@ceshiji ~]# ./c.sh 1 2 3 4 5 6 7 8 9 10 11
    1 10

    实例:
    快速添加用户,并设置好登陆密码
    在执行脚本时,提供用户名作为参数
    将登陆密码设为123456
    [root@ceshiji ~]# vim x.sh
    !/bin/bash
    useradd $1 2> /tmp/err.log
    echo 123456 | passwd --stdin $1 &> /dev/null

    ——————————————————————————————————————

    扩展赋值操作
    区分三种定界符
    双引号"":允许扩展,以$引用其他变量
    单引号'':禁用扩展,即便$也视为普通字符
    反撇号``:放命令,执行命令,取出命令的结果
    (双引号,单引号都是引整体,但是单引号屏蔽特殊符号)

    [root@ceshiji run]# echo "$USER"
    root
    [root@ceshiji run]# echo '$USER'
    $USER
    [root@ceshiji run]# echo `date`.txt
    2017年 07月 25日 星期二 07:04:09 CST.txt

    用tar的形式备份/var/log,备份到/opt下
    [root@ceshiji opt]# tar -czf log_`date +%Y%m%d`.tar.gz /var/log/

    ————————————————————————————————————

  • 相关阅读:
    js实现全选反选功能
    seajs笔记
    延迟加载图片
    JavaScript 数组基本操作
    图片上传,头像上传
    命令模式
    动态加载js css 插件
    发布-订阅模式
    js 切换全屏
    JavaScript 经典之一 闭包
  • 原文地址:https://www.cnblogs.com/Hydraxx/p/7237529.html
Copyright © 2011-2022 走看看