Shell 基础

1.shell基础应用

1.1shell方式分为:交互式和非交互式

  • 交互式指令是日常使用指令,如:rm /... 出现删除提示
  • 非交互式则会跳过提示,通过写shell脚本(既sh后缀文件) 实现

1.2执行方式

  • bash 和  sh
    • bash是sh的超集,sh具有bash不具有的扩展特征
    • sh不能不全tab,缺少条件语句,循环语句,History查询,别名,管道,重定向等等
  • scoure ==  区分 bash == sh
    • bash 调用子shell运行脚本,不会改变当前shell环境变量
    • scoure 使用的父shell,则会改变环境变量
  • 绝对路径执行, 如  /opt/hello.sh
    • 需要提前赋予 + x 权限

2.简单shell脚本设计

  •         快速搭建yum仓库

  • #!/bin/bash
  • rm -rf /etc/yum.repos.d/*.repo
  • echo "[abc]
  • name=abc
  • baseurl=file:///misc/cd
  • gpgcheck=0" > /etc/yum.repos.d/abc.repo
  •         快速装配ftp服务

  • #!/bin/bash
  • yum -y install vsftpd
  • systemctl start vsftpd
  • systemctl enable vsftpd
  •         扩展:重定向输出

> 重定向标准输出

2> 重定向错误输出

&> 重定向所有输出

注:可以解决Erro屏幕占用烦恼!!!!  直接把提示抛出门外, Perfect!!

3.使用shell变量

3.1  变量 {a} 的小故事

[root@svr5 ~]# a=10  //等号两边不能有空格,变量名称可以用数字、字母、下划线,不能以数字开头,不能用特殊符号  注:学过c/java的都知道,虚!!!略过!!!
[root@svr5 ~]# echo $a   //输出用$ ,说白罗就是 print(a) 
[root@svr5 ~]# echo ${a}RMB   //使用大括号防止被字符串同化哦!!
[root@svr5 ~]# unset a    //a这杯子不能再装罗,那就unset清空a的缓存!!!

对罗! 还有单引号和双引号的玩法哦!!

  • 单引号,无视特殊符号!!! 所谓人小胆大
  • 双引号,重视特殊符号!!!所有怕老婆的大胖子

eg:      echo '${a}hello'   echo"${a}hello'"

     我是ahello     ${a}hello

还可以当alias使用哦

比如:

hello = date

直接$hello或者${hello}

world = 'ls /' 或者""

直接$world 或者${world}

3.2环境变量使用

所谓环境变量,是常驻于系统内由始到终的大哥

USER    用户名

HOME  家目录

SHELL  登录解释器

UID    用户编号

HOSTNAME    主机名

PWD   尤其这路径千万别动,不然,你输入什么命令,都找不到家门口罗

PS1    一级提示符

        自定义"

[root@svr5 src]#

"这位置

PS2     二级提示符

                自定义了运行结果前面的回车键  eg:

[root@svr5 ~]# cd \                         #再次验证提示符效果

=> ~        

温馨提示:可以把变量放入/etc/profile,对所有用户有效;放入~/.bash_profile,仅对指定的用户有效.使用env可查看所有环境变量,使用set可查看所有变量

使用位置变量与预定义变量

~~~类似于有参数的函数

创建测试脚本

  1. [root@svr5 ~]# vim location.sh
  2. #!/bin/bash
  3. echo $0                                        #脚本的名称
  4. echo $1                                        #第一个参数
  5. echo $2                                        #第二个参数
  6. echo $*                                        #所有参数
  7. echo $#                                        #所有参数的个数
  8. echo $$                                        #当前进程的进程号
  9. echo $?                                        #上一个程序的返回状态码
  10. [root@svr5 ~]# chmod +x location.sh             #添加可执行权限
  11. [root@svr5 ~]# ./location.sh  a  b  c    #运行脚本

创建账户与修改密码的脚本

  • [root@svr5 ~]# vim /opt/user.sh
  • #!/bin/bash
  • useradd $1
  • echo "$2" |passwd --stdin $1
  • [root@svr5 ~]# ./user.sh jerry 123456
  • 更改用户 jerry 的密码 。
  • passwd: 所有的身份验证令牌已经成功更新。

变量扩展使用

反撇号或$()的应用

  • a=date #仅仅将四个字母赋值给a
  • a=`date` #将date执行结果赋值给a
  • a=$(date) #效果同上

创建一个有日期命名的文件名

  • touch /opt/aaa-`date +%Y%m%d`.txt

read基本用法

  • [root@svr5 ~]# read str
  • What's happen ?                         #随便输入一些文字,按Enter键提交
  • [root@svr5 ~]# echo $str                 #查看赋值结果
  • What's happen ?
  • [root@svr5 ~]# read -p "请输入一个整数:" i   #加入提示输入
  • 请输入一个整数:240
  • [root@svr5 ~]# echo $i
  • 240

stty终端显示控制

脚本如下:

  • #!/bin/bash
  • read -p "请输入用户名" u
  • useradd $u
  • stty -echo   //关闭回显
  • read -p "请输入密码" n
  • stty echo   // 开启回显     以上的包围,可以实现输入密码过程中不显示
  • echo "$n" | passwd --stdin $u

使用export 发布全局变量

默认情况下,自定义的变量为局部变量,只在当前Shell环境中有效,而在子Shell环境中无法直接使用。在父shell中export 变量名,之后子shell可以使用到.

[root@svr5 ~]# export yy  或者 yy=100

4shell中数值运算

整数运算工具  expr命令


  • [root@svr5 ~]# X=1234                             #定义变量X
  • [root@svr5 ~]# expr $X + 78                     #加法
  • 1312
  • [root@svr5 ~]# expr $X - 78                     #减法
  • 1156
  • [root@svr5 ~]# expr $X \* 78                     #乘法,操作符应添加\转义
  • 96252
  • [root@svr5 ~]# expr $X / 78                     #除法,仅保留整除结果
  • 15
  • [root@svr5 ~]# expr $X % 78                     #求模
  • 64

使用$[]或$(())表达式 


  • [root@svr5 ~]# X=1234
  • [root@svr5 ~]# echo $[X+78]
  • 1312
  • [root@svr5 ~]# echo $[X-78]
  • 1156
  • [root@svr5 ~]# echo $[X*78]
  • 96252
  • [root@svr5 ~]# echo $[X/78]
  • 15
  • [root@svr5 ~]# echo $((X%78))
  • 64

使用let命令 


  • 常规写法 主流写法
  • let a=a+1 let a++     #变量a加1
  • let a=a-1     let a--     #变量a减1
  • let a=a+10 let a+=10     #变量a加10
  • let a=a-10 let a-=10     #变量a减10
  • let a=a*2 let a*=2     #变量a乘以2
  • let a=a/2 let a/=2     #变量a除以2
  • let a=a%3 let a%=3     #变量a除以3取余数

 小数运算工具 bc命令

交互式

  • [root@svr5 ~]# bc   //接下来输入计算的表达式

非交互式

  • [root@svr5 ~]#echo "1.1+1" | bc
  • [root@svr5 ~]#echo "10/3" | bc
  • [root@svr5 ~]#echo "scale=2;10/3" | bc #scale可以定义结果是小数点后多少位

利用bc实现数值/小数比较大小

  • echo "$x <= $y" | bc
  • 命题成立1,不成立0

关于数值运算整理: 

整数运算用expr  (整数小数都可)运算用bc

要进行简单的数学计算,可以使用 expr 命令或者 $((...)) 结构,

要不 echo $((X%78))   echo $[X  \*  78],

expr 3  \*  4   //乘号需要转义字符

你可能感兴趣的:(linux,服务器,运维)