#####
##变量定义
=两边不能空格,如果内容有空格,需要使?单引号或者双引号
x="1 2"
echo $x # 1 2
x=1 2 # 报错
双引号持转义 $开头的变量会被动替换(单引号不行)
echo "1 2 $x" # 1 2 1 2
echo $'\n'输出换行
echo $((1+3)) # 4
echo $((3/2)) # 1 取整
awk BEGIN'{print 1/3}'
0.333333
布尔值:
当程序正常执行后:echo $? 得到 0 $?为执行命令返回值
当程序不正常执行后:echo $? 得到 2
0为true 其他都为false
算术判断:
[2 -eq 2] equality相等
[2 -ne 2] 不相等
[2 -gt 2] great than大于
[2 -ge 2] great equality
[2 -le 2] less equality
字符串却可以 == != 比较
&&与 ||或有些不支持 所以用 -a与 -r或
[ -e 1.txt ] # 判断文件是否存在,需要打印ehco $? 来看
-d:是否是子目录
-f:是否是一个普通文件
if [ -e 2.txt ];then echo is exit;else echo not exit;fi
is exit
if [-e 2.txt];then echo is exit;else echo not exit;fi #[要有空格]不然出错
-bash: [-e: command not found
not exit
for i in 1 2 3 4;
> do echo $i;
> done
1
2
3
4
for f in *.txt;do wc -l $f;done
2 1.txt
32 2.txt
for i in $(seq 1 3 10);do echo $i;done
1
4
7
10
while read line;do echo line=$line;done < 2.txt
##写脚本
注释号是:#
函数的书写
f(){
> wc -l *.txt
> }
type f #可以查看函数
f # 执行函数
f(){ echo p1=$1; echo p2=$2; echo p3=$*; echo p4=$#; echo p5=${#*}; }
f a b c d e f g h # 传参数
p1=a
p2=b
p3=a b c d e f g h
p4=8
p5=8
f(){
> wc -l $@ # $@是要传进来的参数
> }
bash 1.sh 1.txt # bash是执行1.sh文件 1.txt是传进去的参数
chmod +x 1.sh 添加权限,给所有都加x权限
./1.sh *.txt 也可以执行
bash -x 1.sh *.txt # 会有调试过程
#!/bin/bash 脚本文件顶行,提示用哪个程序去执行当下脚本,有这一句即使不是.sh结尾的文件,也会是.sh文件来执行
a=123
echo ${a}_1 # 会打印123_1
echo $bsk # 即使bsk还没被定义也不会报错
which python # 可以查看python安装在那里
export PATH=$PATH:$PWD 加环境变量的办法这样就可以which 1.sh了
arry=(1 2 3)
echo ${arry[@]} # 这样才能完整打印数组@改为*也是可以的习惯用@
echo ${#arry[*]} # 得到数组的长度 3
echo ${arry[0]} # 1 索引从0开始的 -1最后一项
``:反引号,就是把里面返回的内容拿出来`ls`=$(ls) 拿到返回的文件名
arry=(`ls`)
每条命令使用;隔开
echo -e a\nbb # -e就是开启转移模式,\n看作是换行
(()):用作计算$((a+b))=$(($a+$b)) 用作比较(($a<$b)) echo $?
seq 1 10 # 1 2 3 4 5 6 7 8 9 10
arry=(`seq 1 10`)
s="hello from your friend"
echo ${s:6:7;} # 索引6开始取后面7个
echo ${s#hello} # from your friend 把hello去掉
echo "${s#hello}" # from your friend 把hello去掉,from前的空格保留
echo "${s#*o}" # from your friend
echo "${s##*o}" # ur friend 贪婪匹配
echo "${s%f*}" # hello from your 去尾 %%也是贪婪
echo ${s/friend/son} # hello from your son
false和[ 3 -eq 2 ] 看一下echo $? # 1
[]、(())里面可以用>= <= ! =这些符号
[ -n "$b"] # 判断字符串b不是空 返回0
[ -z "$b"] # 判断字符串b是空 返回0
[ a -eq b -a a -ge 5 ] -a是与的意思 或是-o
[[ a -eq b && a -ge 5 ]] 这样也行 ||或 推荐用[]
[ ! 2 -ge 1] # 2不大于等于1
ls -l = ll
ls dir && echo exist || echo not exist # 如果文件夹存在,打印出现,不然打印not exist
echo 1 && echo 2 || echo 3 && echo 4 || echo 5 # 1 2 4
因为||若||前面为真||后面就不执行了
bash编程
最新推荐文章于 2024-08-04 22:52:45 发布