1,bash
自定义变量
定义:变量名称=值
变量名称:只能由字母,数字,下划线组成,不能以数字开头
= : 赋值符号 前后不能有空白
值: 所有字符串和数字都可以,但是你应该给字符串加引号
引用变量:$变量名 或 ${变量名}
[root@server shell]# a=8
[root@server shell]# echo $a
[root@server shell]# echo ${a}
8
查看变量: echo $变量名 set(所有变量:包括自定义变量和环境变量)
#name=tingting
#set | grep tingting
取消变量: unset 变量名
#unset name
作用范围: 仅在当前shell中有效
变量替换之匹配截取:
[root@bogon ~]# a=abcdefg //定义变量
[root@bogon ~]# echo ${a:5} //输出变量内容第5字符之后内容
fg
[root@bogon ~]# echo ${a:2:4} //输出变量"a" (第二位之后开始截取,截取四位)
cdef
bash测试
数字
-eq 等于 -ne 不等于
-ge 大于等于 -gt 大于
-le 小于等于 -lt 小于
例:
[root@bogon ~]# cat bash.sh
#!/bin/bash
if [ 5 -eq 3 ];then
echo 你是对的
else
echo 你是错的
fi
[root@bogon ~]# sh bash.sh
你是错的
文件
-f 存在且是正规文件
-d 存在且是目录
-h 存在且是符号链接
-b 块设备
-c 字符设备
-S socket
-p pipe
bash判断
条件判断
if
if代码返回0表示真,非0为假
语法:
if [ *判断* ]; then
*动作*
else
*动作*
fi
##elif:多条件判断
case
case 语句是 shell 中流控制的第二种方式,语法如下:
case word in
pattern1)
list1
;;
pattern2)
list2
;;
... ...
patternN)
listN
;;
*)
list*
;;
esac
例:
#!/bin/bash
a=8
case $a in
5)
echo "这是5";echo "随便写";;
6)
echo "这是6";;
*)
echo 什么都不是;;
esac
bash循环
循环
for 循环:
for...do...done
while...do...done
例
练习编写脚本:批量生成账户并给定账户密码
#!/bin/bash
for i in {1..10}
do
useradd user$i
if [ $? -eq 0 ];then
echo 添加用户 user$i 成功!
else
echo 添加用户 user$i 失败!
exit 6
fi
echo 1 | passwd --stdin user$i
if [ $? -eq 0 ];then
true
else
exit 5
fi
done
while循环
while cmd
do
list
done
例:
[root@bogon ~]# cat test.sh //循环输出0-9
#!/bin/bash
x=0
while [ $x -lt 10 ]
do
echo $x
x=`expr $x + 1`
done
[root@bogon ~]# sh test.sh
0
1
2
3
4
5
6
7
8
9
注:循环控制:
break
直接跳出大循环
continue
跳出当前这一次循环
函数
函数
定义函数
调用函数
取消函数
函数传参
命名空间
local
#!/bin/bash
a=8
test(){
local a
echo $a
a=9
echo $a
}
echo $a
test
echo $a
返回值
return value
value不能超过255
myfunc() #函数定义
{
echo "This is my first shell function"
}
myfunc #函数调用
unset myfunc #取消函数
例:
readPass() {
PASS=""
echo -n "Entry Password: " //交互
stty -echo
read PASS
stty echo
echo
}
readPass
echo Password is $PASS
image.png
使用$1,$2传参
#!/bin/bash
test(){
echo $1 $2
}
test 5 6
使用$*传参
[root@wing shell]# cat a.sh
#!/bin/bash
a=(1 2 3 4 5)
hello(){
for i in $* #因为是一个数组,不知道有多少个参数,所以使用$*获取所有参数
do
echo $[$i*2]
done
}
hello ${a[*]}
网友评论