菜鸟Shell 教程
https://www.runoob.com/linux/linux-shell.html
var变量
#!/bin/sh
name="zs"
#thisiszs
# $会把后面连在一起的东西(符合变量的规范)当做变量
echo thisis${name}jingnian18
#!/bin/sh
# 位置变量用或不用都在哪
# 从0开始($0永远是脚本名称)
# $012345
# 位置变量直接$引用只能识别一位(只能识别$后第一位数字)
echo $0
echo $1
echo $2
echo $9
echo ${10} # 100 111
echo $*
echo $#
Str字符串
#拼接
#!/bin/sh
x=10
y=20
echo $x
echo "$x"
echo '$x'
# 10+20
echo $x+$y
echo "$x" + 123 "$y"
#!/bin/sh
str="abcabcdefg"
echo $str
# 获取长度 # *
# 格式 ${#变量名称}
echo ${#str}
# 截取
# 格式:${str:开始下标:个数}
echo ${str::3} # 从0开始截取3个
echo ${str:2:} # 从2开始截取到末尾
echo --------------------------------------------
# 替换单个
# 格式: ${str/旧/新}
# 没有在原字符串进行修改
#echo ${str/abc/123}
str=${str//abc/123}
echo ${str}
# 替换所有
# 格式:${str//旧/新}
str=${str//abc/123}
# 删除
# 格式:${str#表达式}
#!/bin/sh
str="abc,def,g"
# ${str#表达式} 匹配第一个格式 必须从头开始匹配
# ${str##表达式} 匹配到最后一个 必须从头开始匹配
#注意:不能删除中间的内容
#echo ${str##*,}
# ${str%表达式} 表达式顺序从左向右去写
echo ${str%%,*}
echo ${str}
运算符
#!/bin/sh
#第一种运算 使用命令expr
echo `expr 2 + 2`
x=20
y=30
echo `expr $x + $y`
z=`expr $x + $y`
echo $z
echo -----------------------
#第二种 使用符号
#$[]
echo $[2+2]
echo $[$x+$y]
echo $[x+y]
echo $[a+b]
#!/bin/sh
# true=1 false=0
# false=0 true= !0
echo $[2>1]
echo $[2<1]
x=10
y=20
echo $[$x<$y]
echo $[x<y]
#!/bin/sh
# 与and& 或or| 非!
#$[2>1] $[2>1]
#echo $[2>1 | 2>1]
x=10
y=20
# x>5 and y>80
echo $[x>5 & y>80]
echo $[!2>1]
echo $[!x<5 & y<80]
if语句
#!/bin/sh
#格式 :if开头 判断条件
# then 执行true 执行结果为1
# fi结尾
# [] [[]] () (())
score=20
if [ $score \= 100 ]
then
echo "100分"
elif [ $score -ge 60 ]
then
echo "及格了"
else
echo "不及格"
fi
#!/bin/sh
#[] 括号和符号两边加空格
#[] 使用符号需要加\转义符
#[[]] 括号和符号两边加空格
# (弃用了)
#(()) 真不能使用字母
# 只能使用符号 用变量时不需要加$
x=2
y=5
if ((5==5))
then
echo "true"
else
echo "false"
fi
for语句
#!/bin/sh
# for循环格式1(类似java格式):
# for ((初始化变量;判断条件;控制语句))
# do
# 循环体
# done
jsum=0
osum=0
for ((i=1;i<=100;i++))
do
if ((i%2==0)) # 偶数
then
let osum+=i # 求合
#osum=$[osum+i]
# osum=`expr $osum + $i `
else
jsum+=$i #默认做拼接
#jsum=$[jsum+i]
# jsum=`expr $jsum + $i `
fi
done
echo "偶数和为${osum}"
echo "奇数和为${jsum}"
# python格式:for 变量 in 集合
# do
# 循环体
# done
# 集合格式1:{1..100} 含头含尾
# 集合格式2:`seq 开头 结尾`
#for i in {1..100}
#do
# if ((i%7==0))
# then
# echo $i
# elif ((i/10==7 | i%10==7))
# then
# echo $i
# fi
#done
#for i in `seq 1 100`
#do
# echo $i
#done
s=1
e=100
for i in `seq $s $e`
do
echo $i
done
#!/bin/sh
echo "请输入打印多少行99乘法表"
read sum
for i in `seq 1 $sum`
do
for j in `seq 1 $i`
do
echo -n "$j*$i=$[j*i] "
done
echo ""
done
read
#!/bin/sh
read x xx
read y yy
echo "录入的数据为:${x}"
echo "录入的数据为:${xx}"
echo "录入的数据为:${y}"
echo "录入的数据为:${yy}"
数组arr
#!/bin/sh
# 数组名称=(元素1 元素2...元素n)
arr=(1 2 3 4 5 6 7 8 9)
# 直接引用数组 输出结果为下标为0的元素
#$arr等同于${arr[0]}
#echo ${#arr[*]}
#sum=0
#for((i=0;i<${#arr[*]};i++))
#do
# let sum+=arr[i]
#done
#echo $sum
sum=0
for i in ${arr[*]}
do
let sum+=i
done
echo $sum
#!/bin/sh
arr=(1 2 3 4 5 6 7 8 9)
arr[0]=10
for i in ${arr[*]}
do
echo $i
done
Fun函数
#!/bin/sh
function fun(){
echo "hello"
}
# 调用 在方法定义之后
fun(){
echo "helloworld"
}
fun
#!/bin/sh
# 为什么要使用函数
#求和
# 函数中使用位置变量$0永远是脚本名称
fun(){
a=$0
b=$1
echo $a
echo $b
#echo $[a+b]
}
fun 111 222
echo $0
echo $1
#!/bin/sh
#return int; int(0-255)
fun(){
x="helloworld"
a=$10
y=${10}
echo $a $y
echo $*
echo $#
return 10;
}
#接收参数的格式为$? 接收当前方法最后的执行状态(0表示没问题 其他数据表示有问题)
#$?接收返回值只接受一次
fun 1 2 3 4 5 6 7 8 9 11 12 13
echo $?
echo $?