shell是一个命令行解释器,它接收应用程序/用户命令,然后调用操作系统内核。
1)脚本格式 脚本以#!/bin/bash开头(指定解析器)
2)第一个shell脚本:helloworld
vim helloworld.sh 在helloworld.sh中输入如下内容 #!/bin/bash echo "helloworld"1)常用系统变量
$HOME、$PWD、$SHELL、$USER等2)案例实操 查看系统变量的值
echo $HOME /home/yilei显示当前shell中的所有变量
set BASH=/bin/bash BASH_ALIASES=() BASH_ARGC=() BASH_ARGV=()1)基本语法 (1)定义变量:变量=值 (2)撤销变量:unset 变量 (3)声明静态变量:readonly变量,注意:不能unset
2)变量定义规则 (1)变量名称可以由字母、数字和下划线组成,但是不能以数字开头,环境变量名建议大写。 (2)等号两侧不能有空格 (3)在bash中,变量默认类型都是字符串类型,无法直接进行数值运算。 (4)变量的值如果有空格,需要使用双引号或单引号括起来。
3)案例实操 (1)定义变量A
A=5 echo $A 5(2)给变量A重新赋值
A=8 echo $A 81)$n 基本语法
功能描述:n为数字,$0代表该脚本名称, $1-$9代表第一到第九个参数,十以上的参数参数需要用大括号包含,如${10}2)$# 基本语法
功能描述:获取所有输入参数个数,常用于循环3)$* 基本语法
功能描述:这个变量代表命令行中所有的参数, $*把所有的参数看成一个整体4)$@ 基本语法
功能描述:这个变量也代表命令行中所有的参数, 不过$@把每个参数区分对待5) $?基本语法
功能描述:最后一次执行的命令的返回状态。 如果这个变量的值为0,证明上一个命令正确执行; 如果这个变量的值为非0(具体是哪个数,由命令自己来决定), 则证明上一个命令执行不正确了。$((运算式)) 或 $[ 运算式 ]
计算(4+6)*4
S=$[ (4+6)*4 ] echo $S1)两个整数之间比较
= 字符串比较 -lt 小于(less than) -le 小于等于(less equal) -eq 等于(equal) -gt 大于(greater than) -ge 大于等于(greater equal) -ne 不等于 (not equal)2)按文件权限进行判断
-r 有读的权限(read) -w 有写的权限(write) -x 有执行的权限(execute)3)按照文件类型进行判断
-f 文件存在并且是一个常规的文件(file) -e 文件存在(existence) -d 文件存在并是一个目录(directory)1)23是否大于等于22
[ 23 -ge 22] echo $? 02)helloworld.sh是否具有写权限
[ -w helloworld.sh ] echo $? 03)/home/yilei/cls.txt目录中的文件是否存在
[ -e /home/yilei/xsync.sh ] echo $? 14)多条件判断(&& 表示前一条命令执行成功时,才执行后一条命令,|| 表示上一条命令执行失败后,才执行下一条命令)
[ condition ] && echo OK || echo notOK OK [ condition ] && [ ] || echo notOK notOK通过案例了解它的语法
#!bin/bash if [ $1 -eq "1" ] then echo "yilei" elif [ $1 -eq "2" ] then echo "leiyi" fi通过案例了解它的语法
#!bin/bash case $1 in "1") echo "this is one" ;; "2") echo "this is two" ;; *) echo "this is others" ;; easc通过案例了解它的语法 案例一:
#!bin/bash for (( i=0;i<=100;i++ )) do s=$[ $s+$i ] done echo $s案例二:
#!bin/bash for i in $* do echo "yilei love l" done通过案例了解它的语法 案例一:
#!bin/bash s=0 i=1 while [ $i -le 100 ] do s=$[ $s+$i ] i=$[ $i+1 ] done echo $s1)案例实操
~ basename /home/yilei/helloworld.txt helloworld.txt ~ base /home/yilei/helloworld.txt .txt helloworld1)案例实操
~ dirname /home/yilei/helloworld.txt /home/yilei选项参数说明
-f 列号,提取第几列 -d 分隔符,按照指定分隔符分隔列 -c 指定具体的字符(1)数据准备
~ vim cut.txt dong shen guan zhen wo wo lai lai le le(2)切割cut.txt第一列
~ cut -d " " -f 1 cut.txt dong guan wo lai le(3)在cut.txt文件中切割出guan
~ cat cut.txt | grep "guan" | cut -d " " -f 1 guan选项参数说明
-F 指定输入文件拆分隔符 -v 赋值一个用户定义变量(1)案例实操 切割IP
ifconfig ens33 | grep netmask | awk -F " " '{print $2}' 192.168.1.1111)案例实操
cat /etc/passwd | grep yilei 就会匹配所有包含yilei的行1)特殊字符:^
cat /etc/passwd | grep ^a 就会匹配所有以a开头的行2)特殊字符:$
cat /etc/passwd | grep t$ 就会匹配所有以t结尾的行3)特殊字符:.
cat /etc/passwd | grep r..t 就会匹配包含rabt,rbbt,root等所有行4)特殊字符:*
cat /etc/passwd | grep ro*t 就会匹配包含rt,rot,root等所有行5)特殊字符:[ ]
cat /etc/passwd | grep r[a,b,c]t 就会匹配包含rat,rabt,rbact等所有行6)特殊字符:\
cat /etc/passwd | grep a\$b 就会匹配包含a$b等所有行