BESH脚本的简介

BESH 脚本的使用方法

本章的重点内容:

什么是脚本语言?如何写BASH 脚本?

脚本的控制格式有哪些?

 
shell脚本语言是:命令的堆积并提供流程控制

编程语言:分为编译型语言和脚本编程两种

编译型语言

 编辑-->编译-->连接-->运行
 运作于底层,所处理的是字节,整数,浮点数或其他机器层级的对象

 很难进行“将一个目录里所有的文件复制到另一个目录中”

脚本语言
   以源程序的方式存在,执行前不需要编译,而是靠一个解释器解释执行
   维护简便  但是执行效率差    解释器本身是一个一般的执行器
  bash, 脚本语言解释器
   perl  最为难懂的语言 一个语言学家写的
   python: 完全面向对象的语言 语法很严格 非常简洁 要求缩进
   ruby
   php                          前三种最为流行
   

变量: 分四种类型
 1.本地变量: 对当前shell有效 对子shell无效
  2.环境变量:不但对当前shell有效  对子shell也有效
       声明的时候必须使用一个特殊的命令 -->  导出命令: export

       export A = 3
            A = 3
       export A
       
   例如、export USERNAME
               echo $USERNAME
                   
 export: 显示当前系统正在运行环境变量 导出的环境变量
   
    man bash   可以查看有多少种符号可用
  
     export PS1= '\t \!\$'
     export PS1= '[\u@\h \w]\$'
     
    
 printenv  类似于export
 
 env   在一个指定的环境下运行的命令 
   回车   显示当前的环境变量
             
3.特殊变量
    $? 表示上一个命令是否执行成功
    0   表示执行成功
  
  e.g.    ls
             echo $?
         
4.位置变量 
  $1, $2, $3..通过命令行向脚本传递的参数
-------------------------------------------------------------  
 #!bin/bash 
 
echo " the first param: $1 "
echo " the second param: $2 "


./c.sh 1 2
-------------------------------------------------------------
A=2
B=3
1.echo "$[$A+$B]"                     man exprxian
   格式: $[]
2.echo "$(($A+$B))" 
   格式:$(()) 
  ./sum.sh 
------------------------------------------------------------------
BASH 命令别名
重启系统都会失效  系统环境初始化 
通过命令  没有保存在文件中 


path 系统中内置了保存文件  启动时都读取了一遍
保存用户自定义文件中
用户的环境设置依靠好几个文件实现
为了保存用户环境设置 用好几个文件保存了
装完系统后全局有效  对每个用户都有效


局部有效配置文件


全局下配置文件位置:
/etc/profile,
/etc/profile.d*,
/etc/bashrc

局部 位置
~/.bash_profile,
~/.bashrc,
~/.bash_logout

profile 类:
1.设置环境变量
2.用于运行用户登录执行的一些命令  自己写的脚本可以放进去

bashrc 类:
1.用于设置别名
2.设置本地变量
alias: 
unalias:

alias clear cls = clear 

shell:分为两类
交互式登录式shell:身份打开输入命令
读取次序:
 /etc/profile --> /etc/profile.d/* --> ~/.bash_profile --> ~/.bashrc -->/etc/bashrc


非登录式shell:自己写的脚本 开机就运行 系统自动执行
读取次序;  
 ~/.bashrc --> /etc/bashrc --> /etc/profile.d/* 
 
声明的别名对所有用户有效
  etc/bashrc
  
  
 favorcolor 
  /etc/profile
  
用户变量立即有效 
source /etc/profile
echo $FAVORCOLOR


永久有效声明变量  


-----------------------------------------------------------
用户登录系统的时候,显示,HI,I Know you
------------------------------------------------------------


写一个脚本,完成以下功能:
1.传递两个整数给脚本,让脚本显示这两个数的和差积商


避免转义可以采用  \string

输入/输出重定向,管道
计算机在没指定路径是 所采取的是标准输入输出
标准输入:/dev/stdin,0 设备本身通道标示符  标注输入   对应的文件
          < 重定向标示符
标准输出:/dev/stdout,1  MONITOR  默认显示器
          > 
错误输出:/dev/stddrr,2  MONITOR
          2>
 
 &>  合并错误和正确的输出输出流
 ---------------------------------------------------------------------      
 ls 
 ls > /tmp/ls.out
 cat !$
 ---------------------------------------------------------------------
 
 > 覆盖输出重定向
 >> 追加输出重定向
 
 echo "----------" >> etc/profile            只能是最后一行
 
 set -C 禁止使用覆盖重定向功能
 set +C 打开覆盖重定向功能
 
 
 正确的输出到一个 错误的输出到另一个文件中
 ls /var >> /tmp/var.out 2>> /tmp/var.err
 
 
管道功能: | 连接多个命令 第一个命令结果送达第二个命令
  前一个命令的执行结果 传递到第二个命令
  
 exp : echo "123" | passwd --stdin redhat
 
 
  ls /etc | less    less 分页查看
  
  T  实现一份保存在文件中 另一份送达后面管道命令
  ls /etc | tee 
  
  多个命令的输出都需要保存至同一个文件
  
  command >> a.out
  command >> a.out
  
  
如何定义输入输出自定义重定向
  
  自定义输出重定向
  
  0, 1,2
  
  exec 3> /tmp/myout.out
  然后把所有的定义在3中
  
  exec 3> /tmp/myout.out  自定义文件 保存在自己定义的文件中
  ls /var >&3
  
  cat /tmp/myout.out
  
  ls /etc
  
  实现在一个重定向的文件中避免不停的打开关闭
  
  撤销命令
  exec 3>&-
  
  3-9 都能用 
  
  输入重定向 写为<   
  
  
&> /dev/null     数据黑洞 虚拟的软设备


-----------------------------------------------------------------
程序的执行流:
面向过程 shell BASH   


顺序执行:
选择分支:
循环执行:

for I in list; do
  statement1 
  statement2 
done


for I in 1 2 3 4 ; do       //  `seq 1 10` ; {1..4}
  useradd user$I       
  echo user$I | passwd --stdin user$I
done

`` 相当于 $

-----------------------------------------------------------------------------------------------------------
写一个脚本:
1.切换工作目录至/var
2.依次向/var 目录中的每个文件夹或子目录问好,形如:
  (提示:<input type="image" src="for FILE in /var/*; 或 for FILE in"> `ls /var`;)
   Hello,log
   Hello,run
3.统计/var 目录下共有多少个文件,并显示出来


写一个脚本:
1,设定变量FILE 的值为/etc/passwd
2. 使用循环读取文件/etc/passwd 的第2,4,6,10,13.15行,并显示其内容;(提示:LINE=`head -2 /etc/passwd |  tail -1`可以取得第二行)
3. 把这些行保存至/tmp/mypasswd 文件中


#!bin/bash 
#
cd /var
let SUM=0


for I in `ls /var`; do
  echo "Hello,$I."
  SUM=$[$SUM+1]
done


echo "$SUM files."
  
#!bin/bash
#

FILE=' etc/passwd'                    
                             //    exec 3>> /tmp/mypasswd

for I in 2 4 6 10 13 15; do
  LINE=`head -2 /etc/passwd | tail -1`
  echo $LINE
                            // echo $LINE>&3                        
  echo $LINE >> /tmp/mypasswd
done


exec 3>&-
unset FILE LINE 


//  追加输出   exec  的功能一定要用进去


--------------------------------------------------------------------------------------------------
文本处理工具


 cut:
剪切上下文本中的数据

       -c   以字符为主 执行剪下操作  
       -d   指定分隔符          // dilim 界定符
        -f   指定取第几段     


e.g.     cut -d: -f6,7           //    取第6段 7段   :冒号分割符
                    -d""                //    分隔符为空格
        
   取出来后可以赋值变量
   
----------------------------------------------------------------------------------------------------   
写一个脚本:  sumuser.sh

1.设定变量FILE中的值为/etc/passwd
2.依次向/etc/passwd中的每个用户问好,  行号统计  取得的每一行进行切割
  形如: HELL,root
  
  Hello,root,your UID is 0. 
3.统计一共有多少个用户


-----------------------------------------------------------------------------
如何引用一个脚本的执行结果?      脚本编程中的重要思想
-----------------------------------------------------------------------------



   


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值