请选择 进入手机版 | 继续访问电脑版

运维技术分享平台

 找回密码
 立即注册
首页
查看: 1464|回复: 1

shell脚本总结

[复制链接]

7

主题

8

帖子

33

积分

新手上路

Rank: 1

积分
33
发表于 2020-5-6 22:29:00 | 显示全部楼层 |阅读模式
本帖最后由 magus 于 2020-5-6 22:36 编辑

目录

一.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 “变量”   //加上双引号后打印换行

    回复

    使用道具 举报

    7

    主题

    8

    帖子

    33

    积分

    新手上路

    Rank: 1

    积分
    33
     楼主| 发表于 2020-5-6 22:36:23 | 显示全部楼层
    如何重新编辑,我这排版有问题
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    首页

    手机版|关于自己|运维技术分享平台

    GMT+8, 2024-3-29 00:22 , Processed in 0.069894 second(s), 17 queries .

    Powered by Discuz! X3.4

    © 2001-2017 Comsenz Inc. Template By 【未来科技】【 www.wekei.cn 】

    快速回复 返回顶部 返回列表