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

 

posted @   文尼不是橡皮泥  阅读(41)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
点击右上角即可分享
微信分享提示