shell教程笔记1

本人博客同步发表,排版更佳

echo、读取输入、多行注释

#!/bin/sh
# echo使用
echo "hello world"
echo `date`
echo "-----开启转义-----"
echo -e "OK! \n" # -e 开启转义
echo "It it a test"
echo -e "OK! \c" # -e 开启转义 \c 不换行
echo "It is a test"

# 读取输入
echo "---读取输入内容---"
read input
echo "${input} is your input"

#-p 输入提示文字
#-n 输入字符长度限制(达到6位,自动结束)
#-t 输入限时
#-s 隐藏输入内容
read -p "请输入一段文字:" -n 6 -t 5 -s password
echo -e "\npassword is $password"

echo "------多行注释--------"
:<<!
这是注释
这是注释
这是注释
!
echo "=======注释结束========"

字符串、数组

#!/bin/sh
# 数组
array_name=(value0 value1 value2 value3)
echo ${array_name[@]}

echo "======获取数组长度======"
echo ${#array_name[@]}

echo "------获取某个元素的长度--------"
echo ${#array_name[1]}

# 字符串
echo "-----单引号内使用变量无效------"
var="pegasus"
str='my name is ${var}'
echo ${str}
echo "-----双引号内使用变量有效------"
str="my name is ${var}"
echo ${str}
echo "-------字符串拼接--------"
str="my name is "
echo ${str} ${var}
echo "------截取字符 从第3个字符开始,截取2个字符-----"
str="0123456789"
echo ${str:2:2}

echo "------查找字符 3或者5的位置--------"
str="123456789"
echo `expr index "${str}" 35`

计算与比较

#!/bin/sh
# 算数计算
echo "expr 是一款表达式计算工具,使用它能完成表达式的求值操作。----加法 注意空格----"
var=`expr 2 + 2`
echo ${var}

a=10
b=20

val=`expr $a + $b`
echo "a + b : $val"

val=`expr $a - $b`
echo "a - b : $val"

val=`expr $a \* $b`
echo "a * b : $val"

val=`expr $b / $a`
echo "b / a : $val"

val=`expr $b % $a`
echo "b % a : $val"

if [ $a == $b ]
then
   echo "a 等于 b"
fi
if [ $a != $b ]
then
   echo "a 不等于 b"
fi

# 大小比较
#!/bin/sh
echo "-eq 相等==;-ne 不相等!=;-gt 大于>;-lt 小于<;-ge >= ;-le <="
a=10
b=20

if [ $a -eq $b ]
then
   echo "$a -eq $b : a 等于 b"
else
   echo "$a -eq $b: a 不等于 b"
fi
if [ $a -ne $b ]
then
   echo "$a -ne $b: a 不等于 b"
else
   echo "$a -ne $b : a 等于 b"
fi
if [ $a -gt $b ]
then
   echo "$a -gt $b: a 大于 b"
else
   echo "$a -gt $b: a 不大于 b"
fi
if [ $a -lt $b ]
then
   echo "$a -lt $b: a 小于 b"
else
   echo "$a -lt $b: a 不小于 b"
fi
if [ $a -ge $b ]
then
   echo "$a -ge $b: a 大于或等于 b"
else
   echo "$a -ge $b: a 小于 b"
fi
if [ $a -le $b ]
then
   echo "$a -le $b: a 小于或等于 b"
else
   echo "$a -le $b: a 大于 b"
fi

变量、脚本入参

#!/bin/sh
echo "-------------unset----------------"
tmp="unset var"
echo ${tmp}
unset tmp
echo ${tmp}

echo "---------read only var-----------"
read="read only var"
echo ${read}
readonly read
read="change"

# 脚本入参
echo "Shell 传递参数实例!";
echo "执行的文件名:$0";
echo "第一个参数为:$1";
echo "第二个参数为:$2";
echo "第三个参数为:$3";

echo "参数个数为:$#";
echo "传递的参数作为一个字符串显示:$*";

echo "--- *  等价于 \"1 2 3\"(传递了一个参数),
而 \"@\" 等价于 \"1\" \"2\" \"3\"(传递了三个参数)。---"
echo "-- \$* 演示 ---"
for i in "$*"; do
    echo $i
done

echo "-- \$@ 演示 ---"
for i in "$@"; do
    echo $i
done

printf

#!/bin/sh
printf "Hello, Shell\n"
echo "
1. %-10s 指一个宽度为10个字符(-表示左对齐,没有则表示右对齐)
任何字符都会被显示在10个字符宽的字符内
如果不足则自动以空格填充,超过也会将内容全部显示出来。
2. %-4.2f 指格式化为小数,其中.2指保留2位小数。
"
printf "%-10s %-8s %-4s\n" 姓名 性别 体重kg  
printf "%-10s %-8s %-4.2f\n" 郭靖 男 66.1234 
printf "%-10s %-8s %-4.2f\n" 杨过 男 48.6543 
printf "%-10s %-8s %-4.2f\n" 郭芙 女 47.9876

printf "%-12s %-5s %-4.4f\n" hehehhsh hsidhiss 4.44444

function

#!/bin/bash

demoFun(){
    echo "这是我的第一个 shell 函数!"
}
echo "-----函数开始执行-----"
demoFun
echo "-----函数执行完毕-----"

funWithReturn(){
    echo "这个函数会对输入的两个数字进行相加运算..."
    echo "输入第一个数字: "
    read aNum
    echo "输入第二个数字: "
    read anotherNum
    echo "两个数字分别为 $aNum 和 $anotherNum !"
    return $(($aNum+$anotherNum))
}
funWithReturn
# 函数返回值在调用该函数后通过 $? 来获得。
echo "输入的两个数字之和为 $? !"

# $10 不能获取第十个参数,获取第十个参数需要${10}。当n>=10时,需要使用${n}来获取参数。
funWithParam(){
    echo "第一个参数为 $1 !"
    echo "第二个参数为 $2 !"
    echo "第十个参数为 $10 !"
    echo "第十个参数为 ${10} !"
    echo "第十一个参数为 ${11} !"
    echo "参数总数有 $# 个!"
    echo "作为一个字符串输出所有参数 $* !"
}
funWithParam 1 2 3 4 5 6 7 8 9 34 73

source

以下是use_source.sh内容,能够输出source.sh中的变量name
#!/bin/sh
. ./source.sh
echo ${name}

以下是source.sh内容
#!/bin/sh
name="pegasus"
    原文作者:峰巢
    原文地址: https://www.jianshu.com/p/b0554530820f
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞