Linux Shell 学习笔记

# #!是一个约定标记,告诉系统用哪个Shell来执行

#!/bin/bash

# echo:在控制台窗口输出文本
echo "hello world"

# 添加可执行权限
chmod +x ./test.sh
# 执行脚本
./test.sh

# 变量命名规则
# 1,变量名和=之间不能有空格;
# 2,由英文字符、数字、下划线组成,不能数字开头,不能使用bash关键字
# 使用变量
# $变量名 或者 ${变量名} 推荐
# 设置变量只读
readonly 变量名
# 删除变量(不能删除只读变量)
unset 变量名
# 变量类型
# 1,局部变量:在脚本或命令中定义,仅在当前shell实例中有效,其他shell不能访问
# 2,环境变量:所有的包括shell启动的程序都能访问,有些程序依靠环境变量运行。shell脚本可以定义环境变量
# 3,shell变量:由shell程序设置的保证shell正常运行的特殊变量。

# Shell字符串
# 1,单引号:任何字符都会原样输出,所以变量是无效的;不能出现单独的一个单引号,可以成对出现拼接
# 2,双引号:可以有变量,会转义字符
# 3,不用引号
# 获取字符串长度
${#string}
# 提取字串:从第二个字符开始截取 4个字符,有头有尾
${string:1:4}
# 查找字符串:查找字符i或o的位置(哪个字符先出现就计算哪个)
`expr index "$string" io`

# Shell数组:只支持一维数组,元素用空格分隔
# 定义:数组名=(值1 值2 ... 值n)
# 读取某个数组
${数组名[下标]}
# 读取所有元素
${数组名[@]}
# 获取数组元素个数
length=${#数组名[@]}
length=${#数组名[*]}
# 获取数组中单个元素的长度
lengthn=${#数组名[n]}

# Shell注释
# 单行:#
# 多行:
:<<EOF
注释内容
注释内容
EOF

# Shell参数传递
# 脚本中定义$n,如$1 $2 $3
# 运行时传递 A B C

# 算术运算符:使用反引号``括起来,算术运算符两侧必须有空格
`expr $a + $b`
`expr $a - $b`
`expr $a \* $b`
`expr $a / $b`
`expr $a % $b`
# 条件表达式:[]括起来,[]同样必须有空格
[ $a == $b ]
[ $a != $b ]

# 关系运算符:-eq、-ne、-gt、-lt、-ge、-le
# 两边相等,返回true
[ $a -eq $b ]

# 逻辑运算符:!、-o、-a、||、&&,非、或、与、双与、双或,双与/双或要加上两个[]

# 字符串运算符:=、!=、-z、-n、$,等于、不等于、是否是0长度、是否不是0长度、是否为空

# 文件测试运算符:-d、-f、-r、-w、-x、-s、-e,文件夹、普通文件、可读、可写、可执行、文件大小不为0、存在

# read:从标准输入读取一行,并指定给变量
read inputStr

# echo:字符串输出
echo -e "a \n b" # -e 开启转义,\n 换行

 

# printf命令:

printf比echo移植性更好,基于POSIX标准。

printf format-string args...

%s:字符串格式化、%c:单个字符、%d:整数、%f:小数

%-10s:指一个宽度为 10 个字符(- 表示左对齐,没有则表示右对齐),任何字符都会被显示在 10 个字符宽的字符内,如果不足则自动以空格填充,超过也会将内容全部显示出来。

printf "%s\n" aa bb cc:一个格式对多个参数,格式会被重用

printf "%s%c%d%f":没有参数,%s默认为NULL,%c默认为NULL,%d默认为0,%f默认为0.000000

printf转移序列:\b 回退、\n 换行、\r 回车、\t 水平制表符、\v 垂直制表符、\\ \

 

# Shell流程控制S

if else判断(判断分支不可为空)

# if else
if1=100
if2=200
if test $[if1] -eq $[if2]
then
   echo "$if1 等于 $if2"
elif test $[if1] -gt $[if2]
then
   echo "$if1 大于 $if2"
else
   echo "$if1 小于 $if2"
fi

for循环

# for
forArr=(1 2 3 4 5)
for i in ${forArr[*]}
do
    echo "the value is $i"
done

while循环

# while
w1=1
while(( $w1<=5 )) # while后面还可以接read:while read inputStr
do
    echo $w1
    let "w1++"
done

无限循环

incre=1
while true # 或者冒号: # for(( ; ; ))
do
    echo "死循环啦$incre"
    let "incre++"
done

until循环(与while相反)

# until:与while相反
u1=1
until [ ! $u1 -lt 3 ] # 只要u1不小于3,则执行do
do
    echo $u1
    u1=`expr $u1 + 1`
done

 case遍历

echo '请输入1-3之间的数字'
echo '您输入的数字为:'
read inputNum
case $inputNum in
    1) echo '您输入了1'
    ;;
    2) echo '您输入了2'
    ;;
    3) echo '您输入了3'
    ;;
    *) echo '您没有输入1-3之间的数字'
    ;;
esac

 break&continue

while :
do
   echo -n "请输入1到5之间的数字"
    read inputNum
    case $inputNum in
    1|2|3|4|5) echo "您输入的数字为$inputNum"
    ;;
    *) echo "您输入数字不在1到5之间"
        break # 跳出所有循环
#        continue # 跳出当前循环,后面的语句不会被执行
#        echo "GG"
    ;;
    esac
done

 

# Shell函数

# 无参函数
myfunc01(){ echo
"this is my first function" return `expr 1 + 2` } myfunc01 # 函数必须先定义再调用 echo "函数的返回值是: $? " # 函数的返回值通过 $? 获取
# 有参函数
myfun02(){
    echo "$1"
    echo "$2"
    echo "$10"
    echo "${10}"   # 当$后面>=10时,要使用${10}
    echo "传入的参数个数是 $# 个"
}
myfun02 1 2 3 4 5 6 7 8 9 33 44

 

posted @ 2021-03-13 09:48  lynnk1ng  阅读(73)  评论(0编辑  收藏  举报