Shell
case分支
语法:
case分支,功能类似if,不如if强大,代码比if精简
case 变量名称
模式1)
执行命令1;;
模式2)
执行命令2;;
*)
执行命令n
esac
#!/bin/bash
case $1 in
a)
echo aaa;;
b)
echo bbb;;
c)
echo ccc;;
*)
echo "请输入a或b或c"
esac
-
颜色修改
[root@tedu ~]# systemctl status sshd #查看该服务的运行情况 #零三三 零m #\033扩展用法 31m红色 ABCD自己写的数据 后面的\033 0m还原颜色 [root@tedu ~]# echo -e "\033[31mABCDE\033[0m" ABCDE [root@tedu ~]# echo -e "\033[32mABCDE\033[0m"
函数
函数将公共的语句存储在一个变量中,达到精简脚本的命令目录
函数名称(){
指令
}
function 函数名 {
命令序列
.. ..
}
-
函数定义
#定义函数 [root@tedu ~]# a(){ > echo 123 > echo abc > echo -e "\033[32mABCDE\033[0m" > } 查看函数 [root@tedu ~]# type a a 是函数 a () { echo 123; echo abc; echo -e "\033[32mABCDE\033[0m" } [root@tedu ~]# 使用函数 [root@tedu ~]# a 123 abc ABCDE
-
改变颜色的函数,第一版
#!/bin/bash #定义函数 myecho(){ echo -e "\033[32mABCD\033[0m" } #使用函数 myecho #!/bin/bash #定义函数 myecho(){ echo -e "\033[$1m$2\033[0m" return 0 } #使用函数 myecho 31 abc #传递参数 myecho 32 123 myecho 33 456 myecho 34 jqk myecho 35 qwer
-
中断脚本的操作
exit 退出脚本 break 退出循环,继续执行循环之后的任务 continue 退出当前循环,执行下一次循环
-
案例
从键盘获取整数(的呼入0结束)并求和,输出结果
#第一版 #!/bin/bash sum=0 while : do read -p "请输入一个数字" n let sum=sum+n done #第二版 #!/bin/bash sum=0 while : do read -p "请输入一个数字" n [ $n -eq 0 ] && break let sum=sum+n done echo $sum #第三版 #!/bin/bash sum=0 while : do read -p "请输入一个数字" n if [ -z $n ];then echo "你咋输入了一个空的!,请输入一个数,或者按0结束" continue fi if [ $n -eq 0];then break fi let sum=sum+n done echo $sum
找出20以内6的倍数,并输出它的平方
for i in {1..20} do x=$[i%6] #x是余数 [ $x -eq 0 ] || continue #余数等于0继续下面任务,不等于0结束 echo $[i*i] done for i in {1..20} do x=$[i%6] #x是余数 if [ $x -eq 0 ];then echo $[i*i] fi done
字符串的处理
字符串的处理
字符串的截取
$(变量名:起始位置:长度)
[root@tedu ~]# a=abcdef
[root@tedu ~]# echo ${a:2} #从第二位截取后面
cdef
[root@tedu ~]# echo ${a:2:3} #从第二位截取后面三位
cde
[root@tedu ~]# echo ${a:2:1} #从第二位截取后面1位
c
[root@tedu ~]# echo ${a:0:1} #从第一位截取后面1位
a
#如何生成随机字母
a=qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM1234567890
如何生成8位的随机密码
#!/bin/bash
a=qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM1234567890
pa=''
for i in {1..8}
do
b=$[RANDOM%62]
p=${a:$b:1}
pa=$pa$p
done
echo $pa
shell中的运算
-
方法一:
expr + - * / \ : 转义符号,可以屏蔽之后一个字符的特殊含义
[root@tedu ~]# expr 1 + 1 #加 2 [root@tedu ~]# expr 10 - 2 #减 8 [root@tedu ~]# expr 10 * 2 # expr: 语法错误 [root@tedu ~]# expr 10 '*' 2 #乘 20 [root@tedu ~]# expr 10 \* 2 20 [root@tedu ~]# expr 4 / 2 #除 2 [root@tedu ~]# expr 5 % 2 #求模(取余数) 1 [root@tedu ~]# a=100 [root@tedu ~]# b=33 [root@tedu ~]# expr $a + $b 133 [root@tedu ~]# expr $a - $b 67 [root@tedu ~]# expr $a '*' $b 3300 [root@tedu ~]# expr $a / $b 3 [root@tedu ~]# expr $a % $b 1
-
方法二
$[]
[root@tedu ~]# echo $[1+1] 2 [root@tedu ~]# echo $[5-3] 2 [root@tedu ~]# echo $[3*3] 9 [root@tedu ~]# echo $[5/3] 1 [root@tedu ~]# echo $[5%3] 2 [root@tedu ~]# echo $[$a+$b] 133 [root@tedu ~]# echo $[a+b] 133 [root@tedu ~]# echo $[a+33] 133
-
方法三
let 运算结果不显示,通常用于变量创建或者变量自增减
[root@tedu ~]# let 1+1 #不显示无法取值 [root@tedu ~]# let a=1+1 #通过运算的方法创建变量 [root@tedu ~]# echo $a 2 [root@tedu ~]# let a++ #用于自增减>a=a+1 [root@tedu ~]# echo $a 3 [root@tedu ~]# let a-- #>a=a-1 [root@tedu ~]# echo $a 2 [root@tedu ~]# let a=a+2 #不建议写法 [root@tedu ~]# echo $a 4 [root@tedu ~]# let a+=2 #>a=a+2 [root@tedu ~]# echo $a 6 [root@tedu ~]# let a/=5 #>a=a/5 [root@tedu ~]# echo $a 1
-
方法四
bc计算器:可以计算小数
[root@tedu ~]# echo 1.1+1 | bc 2.1 [root@tedu ~]# echo 'scale=3;10/3' | bc 3.333