1.Shell基本概述

Shell基本概述

1.shell入门

1)什么是shell  壳
 命令解释器  用户输入命令 解释器负责解释给内核 处理后的结果 反馈用户 称为解释
 交互式shell 用户输入命令 解释器解释把处理后的结果反馈给用户的过程称为 交互式
 非交互shell shell执行文本中的命令 当执行到文件的末尾 bash退出
 父shell 不能继承子shell变量  子shell可继承父shell变量
2)什么是shell脚本
 把可执行命令堆积到一个文本中则称为shell脚本(条件表达式 for循环 if判断等等语句)

shell执行方式

hello world!
执行脚本的三种方式   
1)bash test.sh
[root@web01 scripts]# bash test.sh
Hello World!
2)全路径执行
[root@web01 scripts]# chmod +x test.sh 
[root@web01 scripts]# /server/scripts/test.sh
Hello World!
3). 或者source执行
[root@web01 scripts]# . test.sh
Hello World!
[root@web01 scripts]# source test.sh
Hello World!
什么区别?
1 2 在子shell中执行
. source 父进程下执行

环境变量

1.环境变量定义

什么是环境变量?
右边一堆内容,用一个名字来代替称为环境变量
name="I am lizhenya"
如何查看环境变量? 名称的前面加上echoname
如何查看系统定义好的环境变量
env set
如何取消环境变量?
unset name
环境变量(全局变量) 普通变量(局部变量)
按照生存周期划分
永久性 修改配置文件 /etc/profile
临时性 使用export 变量名称 声明即可
不加export 只对当前的shell生效
加export 对当前登录窗口所有的shell生效

2.环境变量的相关文件

   1. /etc/profile 开机或者新连接的窗口执行一次
   2. .bashrc
   3. .bash_profile
   4. /etc/bashrc

3.如何定义环境变量

   变量名=变量值
   环境变量名称的定义      字符 下划线 数字的组合 尽量以字母开头(禁止使用数字开头) 等号两端不允许有空格  见名知其意

4.书写方式

   1. OLDBOY_AGE=18     系统中变量的定义格式
   2. oldboy_age=18
   3. oldboy_Age=18   小驼峰语法
   4. Oldboy_Age=18   大驼峰语法

5.变量值的定义方式

1.数字定义

oldboy_age=18   连续的数字

2.字符串的定义

   name="oldboy"    使用双引号 不知道加什么符号 就加双引号  解析变量
   name='oldboy'    所见即所得  吃什么吐什么

3.命令的定义

   time=`date`   反引号  里面必须跟可执行命令
   time=$(date)   $()
   [root@web01 scripts]# name=oldboy
    [root@web01 scripts]# echo "$oldboyisok"

    [root@web01 scripts]# echo "${oldboy}isok"
    isok
    [root@web01 scripts]# echo "${name}isok"
    oldboyisok
    [root@web01 scripts]# echo '${name}isok'
    ${name}isok

重要的特殊位置变量

    $0  脚本的名称,如果全路径执行脚本,则脚本名称也带全路径 basename 获取脚本的名称 重要
        案例: 给用户提示如何使用此脚本
        echo $"Usage: $0 {start|stop|status|restart|force-reload}"
    $n  脚本的第n个参数 $0被脚本名称占用 从$1开始 $9以后 需要加{}
    $#  代表了脚本的传参的总个数  重要
        案例:
        [ $# -ne 2 ] && echo "你请输入两个参数" && exit
    $*  脚本的所有的传参的参数 如果不加双引号则和$@相同 加上双引号则把所有参数视为一个整体
    $@ 脚本的所有的传参的参数 如果不加双引号则和$*相同加上双引号则把所有参数视为独立的参数
       $* 和$@ 正常情况下一样  循环体内不同
    $?  获取上一条命令的结果 0为成功 非0 失败  重要   
    $$  获取脚本的PID
        案例
        服务器运行大量的名称相同的脚本
        echo $$ > /tmp/count.pid
    $!  上一个在后台运行脚本的PID 调试使用
    $_   获取脚本的最后一个参数 相当于ESC .

传参的三种方式

1)直接传参
2)赋值传参
3)read传参

1.第一种传参方式

sh a.sh $1
echo $1 $2

2.第二种传参方式

name=$1
age=$2
echo $name $age
read -p "请输入名字和年龄" name1 age1
echo $name1 $age1

3.使用read 传参的方式 更改系统的主机名称和IP地址的最后一位 192.168.12.X

案例:

    #!/bin/sh
    sdir="/etc/sysconfig/network-scripts/ifcfg-eth0"
    sip=`cat /etc/sysconfig/network-scripts/ifcfg-eth0|awk -F. '/IPADDR/{print $NF}'|cut -c1`
    read -p "请输入主机名称: " name
    hostnamectl set-hostname $name
    read -p "请输入IP地址的最后一位: " ip
    sed -i "s#$sip#$ip#g"  $sdir
    案例:
    sh ping.sh www.baidu.com
    ping www.baidu.com is ok
    sh ping.sh www.xxxxx.com is error
    [root@web01 scripts]# cat ping.sh 
    #!/bin/sh
    read -p "请输入一个网址: " url
    ping -c 1 -W 1 $url >/dev/null 2>&1
    [ $? -eq 0 ] && echo "ping $url is ok" || echo "ping $url is error"

变量的字符串知识

1.统计变量的长度

    [root@web01 scripts]# name="I am lizhenya"
    [root@web01 scripts]# echo $name
    I am lizhenya
    [root@web01 scripts]# echo "I am lizhenya"
    I am lizhenya
    [root@web01 scripts]# echo "I am lizhenya"|wc -L
    13
    [root@web01 scripts]# echo $name|wc -L
    13
    [root@web01 scripts]# echo ${#name}
    13

2.变量的切片

    [root@web01 scripts]# echo ${name:0:1}
    I
    [root@web01 scripts]# echo ${name:2:2}
    am
    [root@web01 scripts]# echo ${name:0:1}
    I
    [root@web01 scripts]# echo ${name:1}
    am lizhenya
    [root@web01 scripts]# echo ${name:2:5}
    am li

3.取字符串长度

    ###I am lizhenya teacher I am 18
    方法1
    echo I am lizhenya teacher I am 18|wc -L
    方法2
    name="I am lizhenya teacher I am 18"
    echo ${#name}
    方法3
    [root@web01 scripts]# expr length "$name"
    29
    方法4
    [root@web01 scripts]# echo $name|awk '{print length}'
    29

4.取字符串长度小于3的

    方法1 
    for循环方式
        [root@web01 scripts]# cat for.sh 
        #!/bin/sh
        for i in I am lizhenya teacher I am 18
        do
            [ ${#i} -lt 3 ] && echo $i
        done
    方法2
    [root@web01 scripts]# echo I am lizhenya teacher I am 18|xargs -n1|awk '{if(length<3)print}'
    I
    am
    I
    am
    18
    方法3
    [root@web01 scripts]# echo I am lizhenya teacher I am 18|awk '{for(i=1;i<=NF;i++)if(length($i)<3)print $i}'

5.变量的删除和替换

        从前往后删除变量内容
        [root@web01 scripts]# echo $url
        www.sina.com.cn
        [root@web01 scripts]# echo ${url#*.}
        sina.com.cn
        [root@web01 scripts]# echo ${url#*.*.}
        com.cn
        [root@web01 scripts]# echo ${url##*.}
        cn
        从后往前删除变量内容
        [root@web01 scripts]# echo $url
        www.sina.com.cn
        [root@web01 scripts]# echo ${url%.*}
        www.sina.com
        [root@web01 scripts]# echo ${url%%.*}
        www
        变量的替换
        [root@web01 scripts]# echo $url
        www.sina.com.cn
        [root@web01 scripts]# echo ${url/w/a}
        aww.sina.com.cn
        [root@web01 scripts]# echo ${url/w/aa}
        aaww.sina.com.cn
        [root@web01 scripts]# echo ${url/w/a}
        aww.sina.com.cn
        [root@web01 scripts]# echo ${url//w/a}
        aaa.sina.com.cn
        [root@web01 scripts]# echo ${url/sina/baidu}
        www.baidu.com.cn

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,457评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,837评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,696评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,183评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,057评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,105评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,520评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,211评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,482评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,574评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,353评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,213评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,576评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,897评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,174评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,489评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,683评论 2 335