shell总结(1)

1.shell基本知识

1.1shell程序的特点

  • 简单易学

  • 解释性语言,不需要编译即可执行

查看当前系统支持的shell

[root@localhost ~]# chsh -l
/bin/sh
/bin/bash
/usr/bin/sh
/usr/bin/bash
/usr/bin/tmux
/bin/tmux
/usr/bin/zsh
/bin/zsh
​
[root@localhost ~]# cat /etc/shells
/bin/sh
/bin/bash
/usr/bin/sh
/usr/bin/bash
/usr/bin/tmux
/bin/tmux
/usr/bin/zsh
/bin/zsh

查看当前用户使用的shell解释器,当前系统的默认shell

[root@localhost ~]# echo $SHELL
/bin/bash

通过 -s 参数改变当前的shell设置

[root@localhost ~]# chsh -s /bin/zsh

1.2shell的功能

Shell又称命令解释器,它能识别用户输入的各种命令,并传递给操作系统。它的作用类似于Windows操作系统中的命令行,但是,Shell的功能远比命令行强大的多。在UNIX或者localhost中,Shell既是用户交互的界面,也是控制系统的脚本语言。

1.3学好shell编程基础知识

  • 熟练使用vi(vim)编辑器

  • 熟练掌握Linux基本命令

  • 熟练掌握文本三剑客工具(grep、sed、awk)

  • 熟悉常用服务器部署、优化、日志及排错

1.4shell变量

1.4.1shell变量的命名规则

变量名和等号之间不能有空格,变量名的命名须遵循如下规则:

  • 命名只能使用英文字母,数字和下划线,首个字符不能以数字开头。

  • 中间不能有空格,可以使用下划线 _

  • 不能使用标点符号。

  • 不能使用bash里的关键字(可用help命令查看保留关键字)。

什么是驼峰语法?

骆驼式命名法就是当变量名或函数名是由一个或多个单词连结在一起,而构成的唯一识别字时,第一个单词以小写字母开始;从第二个单词开始以后的每个单词的首字母都采用大写字母,例如:

myFirstName、myLastName,这样的变量名看上去就像骆驼峰一样此起彼伏,故得名。

1.4.2使用变量

使用一个定义过的变量,只要在变量名前面加美元符号($)即可,变量名外面的花括号是可选的,加不加都行,加花括号是为了帮助解释器识别变量的边界,例如:

your_name="wu"
echo $your_name
echo ${your_name}

已定义的变量,可以被重新定义,如:

your_name="tom"
echo $your_name
your_name="alibaba"
echo $your_name

1.5 shell脚本的基本元素

对于一个基本的Shell程序来说,应该拥有以下基本元素:

  1. 声明:声明用哪个命令解释器来解释并执行当前脚本文件中的语句,一般写的解释器为(#!/bin/bash) 。

  2. 命令:可执行语句,实现程序的功能。

  3. 注释:说明某些代码的功能,通过在代码中增加注释可以提高程序的可读性。

  4. 赋予rx的权限(chmod a+rx)

单行注释:#开头的一整行都是注释

#comment1 
#comment2 
#comment3

多行注释,使用冒号“:”配合here document可实现多行注释,例如:

:<<BLOCK            //BLOCK可以被替换
……注释内容 
BLOCK

1.6脚本编写规范

(1)脚本文件名应见名知意,例如backup_mysql.sh(linux的扩展名对文件类型没有任何影响,只是为了让用户知道)

(2)文件开头指定脚本解释器 #!/bin/sh 或 #!/bin/bash

(3)开头加版本特权等信息

# Date:创建日期 
# Author:作者 
# Mail:联系方式 
# Function:功能 
# Version:版本

(4)脚本中尽量不要用中文注释

  • 尽量用英文注释,防止本机或切换系统环境后中文乱码的困扰;

  • 单行注释,可以放在代码行的尾部或代码行的上部;

  • 多行注释,用于注解复杂的功能说明,可以放在程序体中,也可以放在代码块的开始部分。

(5)没有必要使用cat命令

eg:cat /etc/passwd | grep guru 
使用以下方式即可 
eg:grep guru etc/passwd 

(6)代码缩进,虽然不缩进不会报错

#!/bin/bash 
i=1                             //定义变量,赋值
while [ $i -le 10 ]             //$i引用变量;-le,less echo,小于等于10
do 
    if [ $i -le 9 ]             //如果小于等于9,则username=user0$i
    then
        username=user0$i 
    else
        username=user$i0        //如果不小于等于9,则username=user$i0
//!非,id $username判断用户是否存在,如果存在返回0值,!0则为假则不执行{}内的;如果不存在返回1,!1为真则执行{}添加账号并修改密码(&&前面为真就执行后面,前面为假则不执行后面)
    fi
    ! id $username &>/dev/null && { 
        useradd $username 
        echo $username | passwd --stdin $username &>/dev/null 
    }
    let i++                     //i自增
done
//&>/dev/null:将输出定向到黑洞,不在屏幕输出

(7)多使用内部命令,内部命令在目录列表时是看不见的,它们由Shell本身提供

常用的内部命令有:echo、eval、exec、export、read、shift、exit

echo可在屏幕上输出信息

  • -n 不换行输出内容,echo 命令输出结束后默认会换行,如果不希望换行,可以加上\n参数

[root@localhost ~]# echo  tset
tset
[root@localhost ~]# echo -n tset
tset[root@localhost ~]# 
  • -e 解析转义字符,默认情况下,echo 不会解析以反斜杠\开头的转义字符。比如,\n表示换行,echo 默认会将它作为普通字符对待

    • \n 换行

    [root@localhost ~]# echo test\ntest
    testntest
    ​
    \n
    [root@localhost ~]# echo -e "test\ntest"
    test
    test
    [root@localhost ~]# echo -e test\\ntest     前一个\会让后一个\失效变成普通的\
    test
    test
    • \r 回车,光标移至行首,但不换行,相当于使用“\r”以后的数字覆盖之前相等长度的字符

    \r
    [root@localhost ~]# echo -e 1234\\rabcd
    abcd
    [root@localhost ~]# echo -e 12345\\rabcd
    abcd5
    [root@localhost ~]# echo -e 1234\\rabcde
    abcde
    • \t 制表符

    \t
    [root@localhost ~]# echo -e 1234\\tabcde
    1234    abcde
    • \b 退格,但前提是“\b”后存在字符

    \b
    [root@localhost ~]# echo -e test\\bwu
    teswu
    [root@localhost ~]# echo -e "test\bwu"
    teswu
    • \v 纵向制表符,换行,但是换行后的新行的开头位置连接着上一行的行尾

    \v
    [root@localhost ~]# echo -e 1234\\vabcde\\v5678\\v90qw
    1234
        abcde
             5678
                 90qw

eval

命令格式:eval args

功能:当shell程序执行到eval语句时,shell读入参数args,并将它们组合成一个新的命令,然后执行。

[root@localhost test]# a='shuju;head -1 /etc/passwd' 
[root@localhost test]# echo $a 
shuju;head -1 /etc/passwd 
[root@localhost test]# eval echo $a 
shuju 
root:x:0:0:root:/root:/bin/bash

exec命令能够在不创建新的子进程的前提下,转去执行指定的命令,当指定的命令执行完毕后,该进程就终止了。

[root@localhost ~]# ps -ef      //查看进程
[root@localhost ~]# vim file        //创建一个文件,
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值