shell脚本总结

目录

一.Shell解释器介绍.....................................................................................................................1

二.Shell执行的文件.....................................................................................................................2

三.Linux终端快捷方式.................................................................................................................3

四.括号功能介绍...........................................................................................................................4

五.变量..........................................................................................................................................5

六.判断.........................................................................................................................................6

七.循环.........................................................................................................................................7

八.进程并发...................................................................................................................................8

九.数组.........................................................................................................................................9

十.函数.......................................................................................................................................10

十一.小知识总结..........................................................................................................................11

一.Shell介绍:

Shell 是一个 C 语言编写的脚本语言,它是用户与 Linux 的桥梁,用户输入命令交给 Shell 处理Shell 将相应的操作传递给内核(Kernel),内核把处理的结果输出给用户。

二. Shell执行的文件:

开机执行文件:

     1. 系统级别:/etc/profile       //加载变量



                 /etc/bashrc       //执行文件命令



     2. 用户级别:.bash_profile



                  .bashrc

关机执行文件:

.bash_history              //加载文件历史命令



.bash_logout              //执行文件命令



注:su - :4个文件全都执行。  su:只执行/etc/bashrc和.bashrc文件。

三.Linux终端快捷方式:

1. 快捷键:

ctrl+r:搜索历史命令    ctrl+d:退出当前shell    ctrl+a:到行首    ctrl+b:到行尾



ctrl+u:删除光标前      ctrl+k:删除光标后         ctrl+s:锁屏        ctrl+q:解锁



ctrl+y:撤销                 ctrl+c:终止执行            ctrl+z:放到后台并暂停。

2. 命令历史记忆:

!:历史命令ID号。  !:字符。  !$:上一个文件的最后参数。   !!:上一个命令。

四.括号功能介绍:

​
( ):在子shell执行命令。  $( ):命令替换。    $(( )):数值运算。    {}:集合

${}:变量应用。    [ ]:判断。    [[ ]]:判断支持正则。    $[ ]:数值运算。

echo ${#URL}             //输出URL内字符有多少。

echo ${URL#*.}          //从左往右删除第一个.

echo ${URL##*.}         //从左往右删除到最后一个.

echo ${URL%*.}         //从右往左删除第一个.

echo ${URL%%*.}        //从右往左删除到最后一个.

echo ${URL:4:5}          //切片从输出第4个字符到后面5个字符

echo ${URL/www/zcl}    //替换第一个

echo ${URL//www/zcl}   //替换全部

${URL:=www.baidu.com} //只有URL没有被赋值和为空时,赋予后面的数值。${URL=www.baidu.com}  //只有URL没有赋值则,赋予一个数值,为空不赋值。${URL:-www.baidu.com}  //只有URL没有被赋值和为空时,显示后面的数值。${URL-www.baidu.com}    //只有URL没有被赋值,显示后面的数值。

​

五.变量:

1. 变量类型:

交互式变量: read -t 5 -p "提示文字" 变量名称


自定义变量:只在当前shell生效


环境变量:   当前shell以及子shell都生效


位置变量:   $1 $2 $3 $4 $5 $6 $7 $8 ${9 }


预定义变量:


$0:脚本名称


$*:所有的参数


$@:所有的参数


$#:参数的个数


$$:当前进程的PID


$!:上一个后台进程的PID


$?:上个命令的返回值。


2.变量查,增,删:

env:查看所有环境变量:

export:设置环境变量

unset:取消环境变量


3.常用环境命令:

PS1:设置提示符

IFS:变量拆分,默认是空格,tab,换行符。OLD_IFS=$IFS:保存IFS。IFS=OLD_IFS:还原。

PATH:外部命令存放路径。

UID:root的uid默认为0

TMOUT:会话超时时间

HISTSIZE:历史命令保存多少条。

HISTTIMEFORMAT=’%F%T’:历史命令执行时间

LANG:语言环境 LANG=en_US.UTF-8  英文环境    LANG=zh_CN.UTF-8 中文环境。

六.判断:

test -d a.txt -a -f zcl.txt    //结果为1    -a表示与

test -d a.txt -o -f zcl.txt    //结果为0    -o 表示或

test ! -d a.txt -o -f zcl.txt   //结果为1    !表示非

[ 条件表达式 ]


[[ 条件表达式 ]]


1.文件判断:

-d:判断是否为目录。 -f:判断是否为文件。  -e:判断是否存在。  -r:判断读的权限。  

-w:是否有写得权限。 -x:是否有执行的权限。-b:文件存在并且是快设备。  -c:文件存在并且是字符设备。   -k:文件存在并设置粘滞位。-L:文件存在并且是链接文件  -ot:文件比谁新。    -nt:文件比谁旧。


2.整数判断:

-eq:判断是否相等。  -nq:判断是否不相等。  -lt:判断是否小于。  -le:判读是否小于等于。  -gt:判读是否大于。  -ge:判断是否大于等于。


3.字符串判断:

==:判断是否等于。   !=:判读是否不等于。   -z:判断是否为空。


4.逻辑判断:(&&与,||或,!非)等运算符。

if [ -f name ] && [ -d name ];then echo 'yes';else echo 'no';fi   &&:只要一方判断错误就no。

if [ -f name ] || [ -d name ];then echo 'yes';else echo 'no';fi    ||:只要一方判读正确就是yes。

if [ ! -f name ] && [ ! -d name ];then echo 'yes';else echo 'no';fi  !:取反判断。

七.循环:

while read line;do echo “$line” ;done < /root/a.txt   

#while IFS进行了过滤,对变量内容为换行符作为拆分。

for i in `cat /root/a.txt`;do echo $i ;done

#for遵循了IFS:默认是以空格,tab,换行符作为分隔。 需要设置IFS=$’\n’。只有换行分隔。

八.进程并发:

1.匿名管道和命名管道都是文件:

匿名管道:|        注:普文件读取后不会删除数据,而管道文件会读取后删除数据。

命名管道:mkfifo /tmp/fifo1   echo “wudidege” > /tmp/fifo1     cat /tmp/fifo1

exec 6<> file1   打开一个文件并指定文件描述符。

exec 6<&-      关闭文件,后会自动删除文件描述符。

无限制并发:
{命令}&


有限制并发:
count=5
mkfifo test_fifo
exec 8<> test_fifo
rm -rf test_fifo
seq $count >&8
start=`date +%s`
for i in {1..50}
do
     read -u 8
    {
     echo $i;sleep 2
     echo >&8
    }&
done

wait

exec 8<&-

echo "Time" "$((`date +%s` - start))s"

九.数组:

普通数组:只能使用整数作为索引。

关联数组:可以使用整数和字符串作为索引。

一.普通数组:

数组赋值:

方法一:一次赋予一个值。

数组名[下标]=变量值。

#array1[0]=zcl

#array1[1]=lfy

#array1[2]=ycq

#array1[zcl++]=xzj    //添加一个xzj的元素,并且索引是3。

方法二:一次赋予多个值。

#array1=(zcl lfy ycq)

#array2=(`cat /etc/passwd`)  //如果文件每一行中没有空格,则默认将每一行作为元素存储到元组里面。如果有一空格则会切分后再存储。

#array3=(`ls /var/ftp/Shell/for*`)

#array4=(zcl lfy ycq “ZCL CTO”)

#array5=($name $size $count)

#array6=(1 2 3 4 “ZCL CTO” [20]=WUDI)

查看数组:

#declare -a

访问数组:

#echo ${array1[0]}    //访问数组内的第一个元素。

#echo ${array1[@]}   //访问数组内的所有元素,等同于echo ${array1
}
#echo ${#array1[@]}  //查看数组内元素的数量。

#echo ${!array1[@]}  //获取数组内元素的索引。

#echo ${array1[@]:1}     //从数组下标1开始访问。

#echo ${array1[@]:1:2}   //从数组下标1开始访问两个元素。

遍历数组:

for i in ${!a[@]};do echo "$i: ${a}" ;done

关联数组:

declare -A        //查看关联数组。

declare -A sex     //定义一个关联数组。

sex=([m]=1)

sex+=([f]=1)      //追加一个元素

let sex[f]++       //元素的值加1

let zcl[$a]++      //添加一个$a作为索引和遇到相同元素加1。

十.函数:

函数用于完成特定功能的代码块,便于复用代码,函数必须先定义才能使用。

定义:

1.函数名(){                   2. function 函数名(){

   实现的功能代码                 实现的功能代码  

}                               }


函数调用:

函数名 $1 $2 $3 将位置参数传入函数内。

十一.小知识总结:

++赋值:

let x=a++:先赋值在++。

let y=++b:先++在赋值。

expr 1 + 1  

变量的引用:

a='ls -l':强引用会输出内容本身。等同于""。

a=`ls -l`:弱引用会执行命令。等同于$()。

type:查看命令的绝对路径。

file:查看文件的类型。

for i in {1...$a}   //错误写法这里识别不了变量

for i in `seq $a`  //正确写法

表示码:

0:标准输入。  1:标准输出。  2:错误输出。  &:表示1和2。

echo 变量    //不打印换行

echo “变量”   //加上双引号后打印换行

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ELIAUK``

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值