文章目录
定义
定义规则
1)变量名称可以由字⺟、数字和下划线组成,但是不能以数字开头, 环境变量名建议⼤写 \color{red}{环境变量名建议⼤写} 环境变量名建议⼤写
2) 等号两侧不能有空格 \color{red}{等号两侧不能有空格} 等号两侧不能有空格
定义变量
unset
:删除变量名
username="小明"
echo $username
定义数组
arr=("大白" "大黑" "大灰")
echo $arr
echo ${arr[1]} //获取第一个元素
echo ${arr[*]} //获取所有元素
将局部变量提升为全局
export
:变量名
引导引号
[root@iZ4k2o11wt0h7eZ demo]# USER=大白
[root@iZ4k2o11wt0h7eZ demo]# echo $USER
大白
[root@iZ4k2o11wt0h7eZ demo]# USER='大白'
[root@iZ4k2o11wt0h7eZ demo]# kk='$USER,是白的'
[root@iZ4k2o11wt0h7eZ demo]# echo $kk
$USER,是白的
[root@iZ4k2o11wt0h7eZ demo]# kk="$USER,是白的"
[root@iZ4k2o11wt0h7eZ demo]# echo $kk
大白,是白的
对单引号内的字符串将始终被解释为它的本身 \color{red}对单引号内的字符串将始终被解释为它的本身 对单引号内的字符串将始终被解释为它的本身。
反引号
yy=`ls` //min
特殊的变量名
$?
: 查看上一次命令或者脚本执行状态的结果 如果是0
则表明输入指令正确,非0为错误
运算符
算数运算
expr
+ , - , *, /, % 加,减,乘,除,取余
[root@iZ4k2o11wt0h7eZ demo]# echo $[4+6]
10
[root@iZ4k2o11wt0h7eZ demo]# echo $((5+7))
12
[root@iZ4k2o11wt0h7eZ demo]# expr 3 + 2
5
正则表达式
正则表达式使⽤单个字符串来描述、 匹配⼀系列符合某个语法规则的字符串。 在很多⽂本编辑器⾥,正则表达式通常被⽤来检索、 替换那些符合某个模式的⽂本。 在 Linux 中, grep,sed, awk 等⽂本
处理⼯具都⽀持通过正则表达式进⾏模式匹配
[root@iZ4k2o11wt0h7eZ demo]# grep "^root" /etc/passwd
root:x:0:0:root:/root:/bin/bash
[root@iZ4k2o11wt0h7eZ demo]# grep "bash$" /etc/passwd
root:x:0:0:root:/root:/bin/bash
yk:x:1000:1000::/home/yk:/bin/bash
[root@iZ4k2o11wt0h7eZ demo]# grep "r..t" /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
[root@iZ4k2o11wt0h7eZ demo]# echo '123$456$789' | grep '\$'
123$456$789
逻辑运算符
格式:[ 条件 ]
注意:[] ⾥⾯前后必须要有空格
结果:0 表示真 ⾮0表示假
(1)两个整数之间⽐较
=
字符串⽐较
-lt
⼩于(less than)
-le
⼩于等于(less equal)
-eq
等于(equal)
-gt
⼤于(greater than)
-ge
⼤于等于(greater equal)
-ne
不等于(Not equal)
(2)按照⽂件权限进⾏判断
-r
有读的权限(read)
-w
有写的权限(write)
-x
有执⾏的权限(execute)
(3) 按照文件类型进行判断
-f
文件存在并且是一个常规文件(file)
-e
文件存在
-d
⽂件存在并是⼀个⽬录(directory)
(4)多条件判断(&& 表示前⼀条命令执⾏成功时,才执⾏后⼀条命令,|| 表示上⼀条命令执⾏
失败后,才执⾏下⼀条命令)
特殊字符串
^:匹配以目标为开头的一行
[root@iZ4k2o11wt0h7eZ ~]# cat /etc/passwd | grep ^root
root:x:0:0:root:/root:/bin/bash
条件选择 if
注意事项: \color{red}注意事项: 注意事项:
(1)[ 条件判断式 ],中括号和条件判断式之间必须有空格
(2)if后要有空格
//方法一:
age=$1
if [ $age -le 16 ]
then
echo "他还是个孩子"
else
echo "他已经是个大人了"
fi
//方法二:
if [ $1 -le 16 ]
then
echo "他还是个孩子"
else
echo "他已经是个大人了"
fi
//方法三:
if [ $1 -le 16 ];then
echo "他还是个孩子"
else
echo "他已经是个大人了"
fi
elif
:
age=$1
if [ $age -le 16 ]
then
echo "他还是个孩子"
elif [ $1 -le 24 ] && [ $1 -gt 18 ]
then
echo "是个年轻人了"
else
echo "他已经是个大人了"
fi
条件判断case
case $1 in
"上午")
echo "火锅"
;;
"中午")
echo "炒面"
;;
"晚上")
echo "喝点燕窝"
echo "喝点小酒"
;;
*)
echo "你重新看时间"
;;
esac
注意事项:
- case⾏尾必须为单词“in”,每⼀个模式匹配必须以右括号“)”结束。
- 双分号“;;”表示命令序列结束,相当于java中的break。
- 最后的“*)”表示默认模式,相当于java中的default。
循环
for
s=0
for((i=0; i<=100; i++));do
s=$[$s+$i]
done
echo $s
# $@ 最终会被""解析为每一个数组元素都是出传入的参数
for j in "$@"
do
echo $j
done
# $* 最终会被""解析为一个连续的字符串只有一个元素
for j in "$*"
do
echo $j
done
while
num=$1
s=0
while [ $num -ge 0 ]
do
s=$[$num+$s]
num=$[$num-1]
done
echo $s
until循环
num=$1
s=0
until [ $1 -eq 0 ]
do
s=$[$1+$s]
num=$[$1-1]
done
echo $s
进⼊条件:循环条件为true ;退出条件:循环条件为false;刚好和while相反,所以不常⽤,⽤while就⾏。
select循环与菜单
PS3
是 select 的提示符,⾃动⽣成菜单
PS3="请输入你的选择:"
select menu in 米饭 炒面 八宝粥 包子 退出
do
case $REPLY in
1|4)
echo "$menu 价格为14"
;;
2|3)
echo "$menu 价格为18"
;;
5)
break
;;
*)
echo "重新选择"
esac
done
① select 循环主要⽤于创建菜单,按数字顺序排列的示菜单项将显示在标准错误上,并显示PS3 提示符,等待⽤户输⼊
② ⽤户输⼊菜单列表中的某个数字,执⾏相应的命令
③ ⽤户输⼊被保存在内置变量 REPLY 中
④ select 是个⽆限循环,因此要记住⽤ break 命令退出循环,或⽤ exit 按 命令终⽌脚本。也可以按ctrl+c退出循环
⑤ select 和 经常和 case 联合使⽤
⑥ 与for循环类似,可以省略 in list, 此时使⽤位置参量
read 读取控制台输出入
read -p "输入一个数:" num
echo $num
自定义函数
function is()
{
read -p "输入一个数:" num
if [ $num -le 1 ];then
echo "$num 不是质数"
return
fi
for((i=2; i*i<=$num; i++));do
if [ $(($num % i)) -eq 0 ];then
echo "$num 不是质数"
return
fi
done
echo "$num 是质数"
}
is