Shell学习笔记

来源教程

整理自 Shell 教程 | 菜鸟教程

运行

第一行

#!/bin/bash

运行方式

  • 执行脚本
    chmod +x ./test.sh  #使脚本具有执行权限
    ./test.sh  #执行脚本
    
  • 解释器参数
    /bin/bash test.sh #作为解释器参数
    

变量

使用

your_name="qinjx"
echo $your_name
echo ${your_name} #推荐

Shell 字符串

单引号:
单引号里的任何字符都会原样输出,单引号字符串中的变量是无效的;
单引号字串中不能出现单独一个的单引号(对单引号使用转义符后也不行),但可成对出现,作为字符串拼接使用。

双引号:
双引号里可以有变量
双引号里可以出现转义字符

字符串连接:
不需要连接符号

greeting="hello, "$your_name" !"

获取字符串长度:

string="abcd"
echo ${#string} #输出 4

提取子字符串:

string="runoob is a great site"
echo ${string:1:4} # 输出 unoo

查找子字符串:

string="runoob is a great site"
echo `expr index "$string" io`  # 返回第一个i或o的位置 输出 4

Shell 数组

定义数组

array_name=(value0 value1 value2 value3)  
array_name[0]=value0  
array_name[1]=value1  
array_name[n]=valuen

读取数组

echo ${array_name[n]}
echo ${array_name[@]} 输出所有元素

Shell 注释

#--------------------------------------------
# 这是一个注释
# author:菜鸟教程
# site:www.runoob.com
# slogan:学的不仅是技术,更是梦想!
#--------------------------------------------
##### 用户配置区 开始 #####
#
#
# 这里可以添加脚本描述信息
# 
#
##### 用户配置区 结束  #####
//多行注释
:<<'
注释内容...
注释内容...
注释内容...
'

参数传递

echo "Shell 传递参数实例!";
echo "执行的文件名:$0";
echo "第一个参数为:$1";
echo "传递的参数作为一个字符串显示:$*";

运算符

算术运算符:

val=`expr $a + $b` #符号+两边有空格
echo "a + b : $val"

if [ $a == $b ] #装在[]中
then
   echo "a 等于 b"
fi

关系运算符:
-eq等于 -ne不等 -gt大于 -lt小于 -ge大于等于 -le小于等于

if [ $a -eq $b ]
then
   echo "$a -eq $b : a 等于 b"
else
   echo "$a -eq $b: a 不等于 b"
fi

布尔运算符:
! -o或 ||或 -a且 &&且

if [ $a -lt 100 -a $b -gt 15 ]
then
   echo "$a 小于 100 且 $b 大于 15 : 返回 true"
else
   echo "$a 小于 100 且 $b 大于 15 : 返回 false"
fi

输出

>
会重写文件,如果文件里面有内容会覆盖。
>>
将输出内容追加到目标文件中。如果文件不存在,就创建文件。

echo输出的字符串总结:

/ 能否引用变量 能否引用转义符 能否引用文本格式符(如:换行符、制表符)
单引号
双引号
无引号

Shell printf 命令:
%d十进制整数 %s字符串 %c字符 %f浮点

Shell 流程控制

if:

if condition
then
    commandN 
fi

if else:

if condition
then
    commandN
else
    command
fi

if elif else:

if condition1
then
    command1
elif condition2 
then 
    command2
else
    commandN
fi

for

for value in item1 item2 ... itemN
do
    command1
    command2
    ...
    commandN
done

while

while condition
do
    command
done

until

until condition
do
    command
done

case

case str in
str1)
    command1
    command2
    ...
    commandN
    ;;
str2)
    command1
    command2
    ...
    commandN
    ;;
str3|str4)
    commandN
    ;;
esac

输入输出重定向

一般情况下,每个 Unix/Linux 命令运行时都会打开三个文件:

  • 标准输入文件(stdin):stdin的文件描述符为0,Unix程序默认从stdin读取数据。
  • 标准输出文件(stdout):stdout 的文件描述符为1,Unix程序默认向stdout输出数据。
  • 标准错误文件(stderr):stderr的文件描述符为2,Unix程序会向stderr流中写入错误信息。
命令 说明
command > file 将输出重定向到 file。
command < file 将输入重定向到 file。
command >> file 将输出以追加的方式重定向到 file。
n > file 将文件描述符为 n 的文件重定向到 file。
n >> file 将文件描述符为 n 的文件以追加的方式重定向到 file。
n >& m 将输出文件 m 和 n 合并。
n <& m 将输入文件 m 和 n 合并。
<< tag 将开始标记 tag 和结束标记 tag 之间的内容作为输入。

/dev/null 文件
如果希望执行某个命令,但又不希望在屏幕上显示输出结果,那么可以将输出重定向到 /dev/null

如果希望屏蔽 stdout 和 stderr

command > /dev/null 2>&1

Shell 文件包含

. filename   # 注意点号(.)和文件名中间有一空格
或
source filename

你可能感兴趣的:(linux)