shell基础语法
shell基础语法
变量定义与使用
a=1 b=12fgs c="hello world"
a="hello" b=1 echo "abc $a". #输出为:abc hello a="hello" b=1 echo 'abc $a'. #输出为:abc $a
a="hello"
echo $a_1 -->什么都没有,将“a_1”理解为一个变量
a="hello"
echo ${a}_1 -->hello_1 #可用于拼接
预定义变量
#预定义变量
$PWD
$PATH
$HOME
$USER
数组变量
#数组变量 a=(1 2 3 4 5) echo $a #1 只打印数组第0个元素 echo ${a[@]} #1 2 3 4 5 打印数组 echo ${a[*]} #1 2 3 4 5 打印数组 echo ${#a[@]} #5 打印数组长度 b=(`ls`) #执行梵音好内的命令,并将返回赋值给b
特殊符号的使用
#转义字符 echo -e "a\nbb" #"-e"开启转译,"\n"换行符
a=2,b=3 echo $((a+b)) #5 echo $(($a+$b)) #5 echo $((2+3)) #5
变量类型
数字型及操作
a=1
echo $((a+2)) #3 echo $((a++)) #2 b=3;echo ((a+b-2)) #1 a=3;b=4;((a<b));echo $? #0;"echo $?"执行上一条命令,返回"0"或"1",成功"0",失败"1"
字符串及操作
s="hello from testerhome" echo $s. #打印s echo $(s:6) #from testerhome 字符串切片 echo $(s:6:3) #for 从6开始3个 echo ${#s}. #21 获取字符串长度 echo ${s#hello} # from testerhome 去除hello本身及之前的字符 "*"去头 echo "${s#*o}" # from testerhome 将第一个"o"后面的字符打印 "*"通配符 echo "${s##*m}" #e 打印最后一个m后面的字符(贪婪匹配) echo "${s%home}" #hello from tester 去除home及后面的字符 echo "${s%%0}" #去除倒数最后一个"o" echi "${s/testerhome/aaa}" #替换 将"testerhome"替换成"aaa"
布尔类型
字符串比较
算术判断
#[ 2 -eq 2 ] 相等 #[ 2 -ne 2 ] 不等 #[ 2 -gt 2 ] 大于 #[ 2 -ge 2 ] 大于等于 #[ 2 -lt 2 ] 小于 #[ 2 -le 2 ] 小于等于 #(())也可以用来比较,返回布尔 [ 3 -ge 1 -a 4 -ge 2];echo $? #0 3大于等于1并且4大于等2 "-a"等同于"&&" "-o"等同于逻辑或
内置判断
-e file;-d file...
注意
1.变量内容有空格需要用引号扩起来
2.引号内有变量,需使用双引号。单引号为将变量当作字符串
3.shell可以使用为定义的变量,但是什么都不会发生:echo $ccc -->什么s都没有
逻辑控制
if结构
if[condition];then[action];fi
if[condition];then[action];else...;fi
if[condition];then[action];elif...;fi
if [ -e 1.txt ];then echo exist;then echo not exist;fi #exist 判断1.txt是否存在
逻辑与、逻辑或
echo "1" && echo "2" || echo "3" && echo "4" || echo "5" || echo "6" && echo "7" && echo "8" || echo "9" #1 2 4 7 8
for循环
for((c1;c2;c3)); #基本格式 do...; done for((i=1;i<10;i++));do echo $i;done #第一种用法 array=(1 2 3 4 5) for((i=0;i<${#array[@]}));do echo $i;done #第二种用法 for i in ${array[@]};do echo $i;done #第三种用法,遍历循环
while循环
i=0;while [ $i -lt 3 ];do echo $i;((i=i+1));done #语法 while read x;do echo $x;done <3.txt #遍历打印3.txt echo "hello world" >3.txt #"<"为输出重回定向 ">"为输入重定向
break与continue
for f in *;do echo $f;if[ -d $f ];then break;fi;done #打断,后面不再执行
for f in *;do echo $f;if[ -f $f ];then echo $f is file;else continue;fi;done #跳出当前循环,进行下一次循环
echo $$ #显示当前pid
bash. #新开一个进程
a="ooooo"
(a=1)
echo $a #ooooo ()中为子项,使用后消亡
(a=1;echo $a);echo $a #1 oooo 1为子项中a的值,oooo为外面a的值
{ a=2;echo $a;};a=2;echo $a #2 2 大括号中a不会消亡,在当前shell执行
ps命令
ps #显示当前进程 ps -e #显示当前所有进程 ps -ef #显示当前所有进程全格式 echo $$ #查看当前进程号 jobs #查看状态(running) control+c. #暂停任务 bg 进程号 #继续执行
shell环境
pwd ##查看当前路径 vim .bash_profile #将环境变量添加进去,保存退出 test01.sh #执行文件
脚本应用
创建文件,授权文件,使用文件
mkdir test. #创建文件夹 vim test01.sh #创建shell文件 echo "hello fron testerhome" #编辑脚本 chmod +x test01.sh #授权文件执行权限 bash test01.sh #执行文件
重定向
echo "hello to testerhome" > 1 #写入文件1中 echo "herllo from testerhome" >> 1 #追加内容到1
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY