Shell编程

1. 如何开始

打开Linux终端,使用指令创建文件,以.sh结尾,拓展名不重要,并不影响脚本的执行。

但是通常会设置为.sh表示此为一个shell脚本

vi / vim    #创建文件
2. 输出
1. vim output.sh  //创建文件
2. echo "hello shell"  //文件内编辑
3. wq

编辑后使用wq指令完成编辑。

3. 运行脚本
chmod +x ./output.sh  #运行权限
./output.sh
./output.sh &   #后台运行
jobs  #查看当前运行的脚本
fg %number #将number编号的脚本切换到前台运行
ctrl+z  #切换到后台并暂停
bg number  #将number编号的脚本开始后台启动
4. 变量
① 定义
name="hlc"
② 使用变量
${name}
echo ${name}   #打印变量
③ 只读变量
readonly name  #将`name`设置为只读
④ 删除变量

不可以删除只读变量。

unset name
⑤ 字符串
str='hlc ${name}'   #无法识别变量
str="hlc ${name}"   #可以识别变量
⑥ 字符串长度
${#str}
⑦ 截取字符串
${str:1:2} #从字符串下边`1`开始向后截取2位
5. 数组
① 定义
array=(
value
value
value
value
)

或

array[0]=value
array[1]=value
array[100]=value  #下标可以不连续
② 读取数组
${array[0]}

${array[@]} 获取所有
③ 获取数组长度
${#array[@]}
6. 传参
① 传递参数
./output.sh 第一个参数 第二个参数 第三个参数  #参数从0开始,0位参数默认为文件名
② 获取参数
echo $1
echo $2
echo $3
echo $0
③ 特殊参数
$# 获取传递到脚本的参数个数
$* 获取所有传递进来的参数
$$ 获取脚本进程ID
$! 获取后台运行的最后一个进程ID
$@ 同样获取所有传递进来的参数,但是每个参数会加引号
$- 显示`Shell`使用的当前选项
$? 显示脚本退出状态,0为正常,其他为异常
7. 运算符

原生的bash不支持数学运算,但是可以通过其他命令来完成,例如awkexpr,后者最常用。

① 使用规范
value=`expr 1 + 1`
echo "${value}"

注意expr和表达式之间必须由空格隔开,表达式也是。1+1时错误的应该写成1 + 1

② 常用运算符

Java基本无异。

8. echo指令
① 打印字符串
echo "内容"
echo '内容'
② 显示变量
echo "${value}"
③ 转义
echo -e "test \n next line"  #-e 开启转移   \n换行
echo -e "test \c"  # \c 不换行
echo -e "this line"
④ 将结果输出到文件
echo "test" > filename
⑤ 打印命令执行结果
echo `date`
9. test命令
① 数值测试
if test $[num1] -eq $[num2]
then
    echo '相等'
else
    echo '不相等'
fi
参数说明
-eq等于则为真
-ne不等于则为真
-gt大于则为真
-ge大于等于则为真
-lt小于则为真
-le小于等于则为真

代码中[]可以进行基本算术运算

if test $[num1+num3] -eq $[num2]
then
    echo 'num1+num3=num2'
else
    echo '不等于'
fi
② 字符串测试
if test ${str1} = ${str2}
then
    echo '相等'
else
    echo '不相等'
fi
参数说明
=等于则为真
!=不相等则为真
-z 字符串字符串的长度为零则为真
-n 字符串字符串的长度不为零则为真
③ 文件测试
if test -e ./output.sh
then
    echo '存在'
else 
    echo '不存在'
fi
参数说明
-e 文件名如果文件存在则为真
-r 文件名如果文件存在且可读则为真
-w 文件名如果文件存在且可写则为真
-x 文件名如果文件存在且可执行则为真
-s 文件名如果文件存在且至少有一个字符则为真
-d 文件名如果文件存在且为目录则为真
-f 文件名如果文件存在且为普通文件则为真
-c 文件名如果文件存在且为字符型特殊文件则为真
-b 文件名如果文件存在且为块特殊文件则为真
④ 与或非
参数说明
-a
-o
!
if test -e ./output.sh -o -e ./test.sh
then
    echo '存在一个'
else
    echo '都不存在'
fi
10. 流程控制
① 条件判断
# if

if 条件
then
   待执行语句...
fi

# if - else

if 条件
then
    待执行语句...
else
    待执行语句...
fi

# if - else - if

if 条件
then 
    待执行语句...
elif 条件
then
    待执行语句...
else
    待执行语句...
fi

例如:

a = 1
b = 2
if test $[a] -gt $[b] #或 if test [${a} > ${b}]
then
    echo 'a 比 b 大'
else
    echo 'b 比 a 大'
fi
② 循环控制

for

#方式1

for item in 1 2 3
do
  echo "The value is: ${item}"
done

# The value is: 1
# The value is: 2
# The value is: 3

#方式2

for item in "This is a string"
do
  echo ${item}
done

# This
# is
# a
# string

while

i=3
while((${i}<=5))
do
  echo "The value is:${i}"
  let "i++"  #或 i=`expr ${i} + 1`
done

until

until 条件
do
  待执行语句...
done
case
echo '输入 1 到 4 之间的数字:'
echo '你输入的数字为:'
read aNum
case ${aNum} in
    1)  echo '你选择了 1'
    ;;
    2)  echo '你选择了 2'
    ;;
    3)  echo '你选择了 3'
    ;;
    4)  echo '你选择了 4'
    ;;
    *)  echo '你没有输入 1 到 4 之间的数字'
    ;;
esac
breakcontinue

Java

11. 函数
① 创建函数
doSomething() {
    //todo
}
② 调用
doSomething
③ 参数传递
doSomething 1

doSomething() {
  echo "${1}"
}
④ 返回值
doSomething   #调用函数
echo "返回值为: $?"  #获取返回值
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值