shell概述

语言类型

编译型:

C   C++   go   java等等

解释型:

python   perl   php  shell  bash

 

定义变量方式

直接赋值:

名=值      ##无空格,不能有特殊字符,变量名不能以数字开头,名最好使用驼峰语法不能与系统命令冲突

 

传参:

传递参数--位置变量

 

交互式设置变量:

read命令

-p 设置提示信息

-t 设置超时时间,秒

-s 关闭回显,加密你的输入

[root@jenkins scripts]# echo $pass

 

[root@jenkins scripts]# read -p 'biubiubiu:' -t 10 -s pass

biubiubiu:

[root@jenkins scripts]# echo $pass

wo shi ni ba ba

 

变量类型

自定义用户变量,普通变量,局部变量  .bash_profile  .bashrc

环境全局变量   /etc/profile  /etc/bashrc    

位置$1、$2、$3......$9、${10}   ##两位数的位置变量必须使用花括号

特殊$# 命令行中位置参数的个数

$@ 不加双引号与$#作用相同,”$@”则表示将所有参数视为不同的独立字符串,相当于 “$1” ”$2” ”$3”...,这是将参数传递给其他程序的最佳方式

$* 所有位置参数的内容

$? 返回上一条命令的状态,0 正常,其他 异常

$0 当前执行的脚本或程序名称

$_$! 显示上一条命令的最后一个参数

$$ 获取执行上一个命令语句的返回值 (0为成功,非0为失败)

 

[root@jenkins scripts]# for i in $*;do echo $i;done
I
am
handsome
boy..
[root@jenkins scripts]# 
[root@jenkins scripts]# for i in $@;do echo $i;done
I
am
handsome
boy..


[root@jenkins scripts]# for i in "$*";do echo $i;done
I am handsome boy..
[root@jenkins scripts]# for i in "$@";do echo $i;done
I am
handsome
boy..

 

expr

运用变量进行简单的整数运算

expr  变量1   运算符   变量2   ……

运算符:+加   -减   \*乘   /除   %取余

 

函数

把命令集合到一起,用函数名作为命令调用命令集合的结果

可以在脚本里调用,也可以在命令行调用,命令行的话需要source一下

 

数组

 

echo ${renyi}   ##最好使用变量时候加上花括号,因为  金庸新著

正常是用花括号分隔,但是 . 也能分隔

 

unset    删除变量、环境变量与函数

-f 仅删除函数

-v 仅删除变量

 

wc  -L    ## -L:获取文件中最长一行的内容的长度

 

定时任务的脚本加上 source /etc/profile 放置执行失败的情况

 

$()    支持嵌套

`` 不支持嵌套

变量的字串:返回变量的长度

 

条件表达式

[ 条件表达式 ]

文件测试:

        -d 目录(是否为)

        -f 文件

        -s 非空文件

        -e 存在

        -L 链接文件

        -r 读取权限

        -w 写入权限

        -x 执行权限

字符串比较:

        -z 字符串长度为0,则真

        -n 字符串长度不为0,则真

        = 第一与第二个字符相同

        != 第一与第二个字符不相同

整数值比较:

        -eq 等于

        -ne 不等于

        -gt 大于

        -lt 小于

        -le 小于等于

        -ge 大于等于

        (e等,n不,g大,l小,)

逻辑测试:

        ||      逻辑或(或者) -o

        &&   逻辑与(而且) -a

        !    逻辑否(不)

 

if

单分支:

if  [ 条件测试操作 ]

        then(如果正确则)

                命令序列

fi

 

双分支:

if [ 条件测试操作 ]

        then(如果正确则)

                命令序列1

        else(不然则)

                命令序列2

fi

 

多分支:

if [ 条件测试操作1 ]

        then(如果条件1正确则)

                命令序列1

        elif [ 条件测试操作2 ]

                then(如果条件2正确则)

                        命令序列2

        ......(可以有很多个elif)

        else(不然则)

                命令序列3

fi

 

case条件语句

输入的变量值匹配到哪个模式,就执行哪个模式下的命令序列

case  变量名  in

        模式1)

                命令序列1

                ;;

        模式2)

                命令序列2

                ;;

        模式3)

                命令序列3

                ;;

        ...更多模式...

        *)

                默认命令序列

esac

 

for循环语句

for  变量名  in   取值列表

do

        命令序列

done

 

## 批量创建用户并设置随机八位密码

## 过滤指定某些服务进行操作

 

for循环:指定循环条件,循环条件不满足会停止循环

while循环:指定循环条件,循环条件满足时,会无限循环(实现死循环

until循环:指定循环条件,循环体检不满足时,会无限循环

脚本在无限循环执行时:
利用ctrl+z,只是暂停脚本运行(暂停的进程)

 jobs       --- 前台运行脚本命令,若放入后台,可以通过jobs命令查看

 

while循环

while  [ 条件测试操作 ]

do

        命令序列

done

 

例:

while true

do

        uptime

        sleep 60

done

 

 

break n    ##n表示跳出循环的层数,如果省略n表示跳出整个循环

 

continue n  ##n表示退出到第n层继续循环,如果省略n表示跳过本次循环,忽略本次循环的剩余代码,进入下一次循环

 

exit n   ##退出当前shell程序,n为返回值,也可以省略,在下一个shell里通过$?接收这个n的值

 

return n     ##在函数里,作为函数返回的值,用于判断函数执行是否正确。和exit一样,如果函数里循环,也会直接退出循环退出函数(不执行后面的函数),控制返回值

 

let

是一个执行测试的语句

let 变量++ ##变量自身加1

let 变量-- ##变量自身件2

let 变量+=值 ##等价于 变量=变量+值

 

小结

1.while循环的特长是执行守护进程以及我们希望循环不退出持续执行,用于频率小于一分钟循环处理(crond),其他的while循环几乎都可以被for循环代替

2.case语句可以被if语句替换,一般在系统启动脚本传入少量固定规则字符串用case语句,其他普通判断多用if

3.一句话,if、for语句最常用,其次while(守护进程)、case(服务启动脚本)

 

脚本调试

1.windows脚本传到linux之后用不了:

[root@shell scripts]# yum -y install dos2unix

[root@shell scripts]# dos2unix windows.sh

dos2unix: converting file windows.sh to Unix format ...

[root@shell scripts]# sh windows.sh

 

2.测试局部脚本字段

 

3.-x 参数

1)

 

2)

 

加色

字体加颜色
echo -e "\033[30m 黑色字 trainning \033[0m"
echo -e "\033[31m 红色字 trainning \033[0m"
echo -e "\033[32m 绿色字 trainning \033[0m"
echo -e "\033[33m 黄色字 trainning \033[0m"
echo -e "\033[34m 蓝色字 trainning \033[0m"
echo -e "\033[35m 紫色字 trainning \033[0m"
echo -e "\033[36m 天蓝字 trainning \033[0m"
echo -e "\033[37m 白色字 trainning \033[0m"

背景加颜色
echo -e "\033[40;37m 黑底白字 welcome \033[0m"
echo -e "\033[41;37m 红底白字 welcome \033[0m"
echo -e "\033[42;37m 绿底白字 welcome \033[0m"
echo -e "\033[43;37m 黄底白字 welcome \033[0m"
echo -e "\033[44;37m 蓝底白字 welcome \033[0m"
echo -e "\033[45;37m 紫底白字 welcome \033[0m"
echo -e "\033[46;37m 天蓝白字 welcome \033[0m"
echo -e "\033[47;30m 白底黑字 welcome \033[0m"

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值