shell编程1 变量

脚本的编写规则;

惯例后缀名是.sh

在linux中,文本以#开头的是注释,以#!/bin/bash开始是脚本的标志,必需。

脚本执行:

首先赋予执行权限chmod  755  first.sh  执行脚本 ./frist.sh

./代表当前目录,Linux执行脚本默认不查找当前目录,需要加./

也可以直接绝对路径

直接执行 bash first.sh  可以直接执行

 

1     shell变量

1.1     分类

用户自定义变量

环境变量:保存和系统相关的变量,可以自定义,但是变量名和变量作用是固定的(默认是大写)

位置参数变量:向shell脚本中传递参数的变量

预定义变量:shell 脚本 定义的变量,不能自定义,变量作用是固定的

1.2     定义和输出

linux 所有的变量类型都是字符类型,特别注意。

name=string “=”俩边不能有空格  String 可以用”string” 或 ‘string’ ,双引号允许变量替换,单引号不可以

字符串拼接:

name=123
name=${name}123  这样 name 就变为123123

输出:

输出 echo $PATH, 或者echo ${PATH}  echo I love you 都可以
echo – e 可以 输出特殊格式,例如tab,换行,颜色输出等
echo–e  “\e[1;32m 文本  \e[0m”  32m是颜色
echo 输出中!是一个特殊的字符

修改变量的值:name=newString

set : 查看所有变量  使用set -u ,当查看变量不存在是,会报错,默认是不开启的

删除变量 unset  name

比较重要的几个环境变量:

PATH, HOME,PATH,RANDOM(随机数)

PATH :我们使用命令的查找路径,可以将我们自己的命令添加到PATH中,这样就可以直接运行了。

PS1 : 命令提示符,可以自己设置

PS2 : 当使用\来表示命令未输完时,下一行的提示符。

自定义提示符颜色
PS1="\[\e[37;40m\][\[\e[32;40m\]\u\[\e[37;40m\]@\h \[\e[36;40m\]\w\[\e[0m\]]\\$ "

env:查看所有环境变量ulimit :可以限制用户创建文件大小以及其他。

位置参数变量:

$n:n 为数字,$0 代表命令本身,$1-$9 代表第一到第九个参数,十以上的参数需要用大括号包含,如 ${10}。

$*:这个变量代表命令行中所有的参数,$* 把所有的参数看成一个整体。相当于将所有参数拼接为字符串。

$@:这个变量也代表命令行中所有的参数,不过 $@ 把每个参数区分对待。相当于将所有参数封装进数组中,使
用for循环可以读取参数

$#:这个变量代表命令行中所有参数的个数。

进行数值运算: 

$((num1 + num2))   //$ (()) 即可获得计算结果

预定义变量:

使用read命令来进行预先定义shell脚本的变量:

read option paramName   运行程序后输入。可以输入提示信息。 read 参数  变量名, 将键盘的输入赋值给指定的变量名

-p “提示信息”   输入前显示提示信息

-t  “秒数”       等待时间

-s       隐藏输入数据

-n 字符数:只接受指定的字符数。

示例:

#! /bin/bash
read -p "please print you name: " name
echo $name

read -p "please print you age: " -t 30 age
echo $age

read -p "please print you password : " -s password
echo $password

read -p "please print you sex : " -n 1 sex
echo $sex

1.3     作用域

局部变量:所有自定义的变量默认都是局部变量,范围为当前shell

全局变量:环境变量是全局变量,范围为当前shell即其所有子shell

export 可以将局部变量变为全局变量

export 变量1 [变量2]

不带参的export命令可以查看当前所有的环境变量

set 方法和export类似,但比他更加强大可以将所有变量全部列出来。

bash 进入子shell

exit 退出当前shell

注意:要想在子shell中使用父shell的变量,变量必须为全局变量

变量在子shell中值的修改不会传回父shell   

 

3     输出重定向和输入重定向

&>> 将错误信息和正确信息输入到摸个文件内,>>俩边没空格

命令1 >> 文件1 2>>文件2  已追加的方式将正确信息输入到文件一中,错误信息输入到文件二中,标红的没空格

tee 可以将数据流分别送到文件和屏幕上。 ls | tee a.txt.   会在屏幕上打印信息,并且a.txt内也会有内容。

4     管道

过滤,将前一个命令的结果作为后一个命令的输入。管道命令必须是能够接受标准输出。例如:less, more, head, tail,grep,cut,像cp,mv等就不可以

格式: 命令1 | 命令2 | 命令3

sed 命令: 可以直接对标准输出进行删除,取代,替换 sed [options] [动作],动作必须在单引号内

ll /etc |sed '2,3d' ,删除第二三行

ll /etc | sed '2akkkk'在第二行后添加 kkkk,如果需要第二行前加的话,将a改为i就可以啦,如果需要多啊行的话,需要\来进行换行

ll /etc | sed '2,5ckkkkkk'用kkkk来取代2-5行

ll /etc | sed -n'2,5p' 将2-5行打印出来,需要把选项-n加上,代表严格模式,不然会重复输出3-5行

 

当使用复杂正则表达式是,例如: | ,+ ? ()是,此时grep就不适合了,需要用到egrep 或者grep -e

printf 命令:与C语言中的printf

支持管道的命令: less , more, head,tail,grep,cut

5    元字符

;将多个命令组合在一起,即使其中一个出错,其他命令也会执行

&& 具有短路效应,如果前面的出错了,后面的命令不会执行

|| 前面的命令执行错误,后面的才会执行

命令1 && echoyes  ||echo no 可以判断命令是否执行正确

()

{}

\ 跳脱字符,如果命令一行写不下,可以使用它多行输入

>  >> 输出重定向

$() 可以进行命令替换 printf '%s\t%s\t%s\t' $(cat a.txt) 可以现将cat a.txt命令执行,并将结果替换

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值