Bash Shell知识总结

shell定义变量规范:

一、shell定义变量时,变量名不加美元符号,如:your_name=“rose”

  1. 变量名和等号之间不能有空格
  2. 命名只能使用英文字母,数字和下划线,首个字符不能以数字开头
  3. 中间不能有空格,可以使用下划线(_)
  4. 不能使用标点符号
  5. 不能使用bash里的关键字(最下方有关键字表)

     符合条件的示例:

       runoob
       LD_PATH
       _var
       var2

二、使用一个定义过的变量,只要在变量名前面加美元符号即可

your_name=“rose”
echo $your_name
echo ${your_name}(括号可有可无)

三、已定义的变量,可以被重新定义

your_name=“rose”
echo $your_name
your_name=“jack”
echo $your_name

输出结果是:
rose
jack

四、删除变量:

使用unset命令可以删除变量

unset variable_name

变量被删除后不能再次使用,unset不能删除只读变量

五、变量类型,运行shell时,会同时存在三种变量:

  • 局部变量:局部变量在脚本或命令中定义,仅在当前shell实例中有效,其他shell启动的程序不能访问局部变量。
  • 环境变量:所有的程序,包括shell启动的程序,都能访问环境变量,有些程序需要环境变量来保证其正常运行,必要的时候shell脚本也可以定义环境变量。
  • shell变量:shell变量是由shell程序设置的特殊变量,shell变量中有一部分是环境变量,有一部分是局部变量,这些变量保证了shell的正常运行。

shell字符串:

     字符串是shell编程中最常用最有用的数据类型,字符串可以用单引号,也可以用双引号,也可以不用引号。

  • 单引号:
    str=‘this is a string’
    (1)单引号里的任何字符都会原样输出,单引号字符串中的变量是无效的
    (2)单引号字符串中不能出现单独一个单引号(对单引号使用转义符后也不行,但可成对出现,作为字符串拼接使用)
  • 双引号:
    your_name=‘nnn’
    str=“I konw you are \”$your_name\"! \n"
    echo -e $str (注:echo -e 激活转义字符)
    输出结果:
    I konw you are “nnn”!
    双引号优点:
    (1)双引号里可以有变量
    (2)双引号里可以出现转义字符

一、获取字符串长度:

string=“abcd”
echo ${string}
输出结果:4

二、提取子字符串:

string=“runnob is a great site”
echo $(string:1:4)
输出结果:unno
(字符上方对应的是01234…,把1位置的字符当做第一个,计数4个,返回)

三、查找子字符串:
        查找字符i或o的位置(哪个字符先出现就计算哪个)

 string="runoob is a great site"
 echo `expr index "$string" io`
 输出结果:4

shell数组:

一、读取数组元素:

valuen=${array_name[n]}

二、使用@符号可以获取数组中所有元素:

echo ${array_name[@]}

三、获取数组长度:

length=${#array_name[@]}

length=${#array_name[*]}

四、()和{}的区别:
()表示在"nested sub-shell"中划分一个命令群组,如果我们希望里面的命令对之前和之后的设定不影响的话,就要用(),反之,用{}。

例1:

    $cat shell.sh; ./shell.sh
    #! /bin/bash
    line="123 25 36522"
    (
        line="wwww"
        echo "$line"
    )
     echo "$line"
     输出结果:
     wwww
     123 25 36522 

例2:

     $cat shell.sh; ./shell.sh
     #! /bin/bash
     line="123 25 36522"
     {
         line="wwww"
         echo "$line"
      }
     echo "$line"
     输出结果:
     wwww
     wwww

shell的匹配:

假设定义了一个变量为:
代码如下:
file=/dir1/dir2/dir3/my.file.txt

可以用${ }分别替换得到不同的值:

${file#*/}:删掉第一个 / 及其左边的字符串:dir1/dir2/dir3/my.file.txt

${file##*/}:删掉最后一个 / 及其左边的字符串:my.file.txt

${file#*.}:删掉第一个 . 及其左边的字符串:file.txt

${file##*.}:删掉最后一个 . 及其左边的字符串:txt

${file%/*}:删掉最后一个 / 及其右边的字符串:/dir1/dir2/dir3

${file%%/*}:删掉第一个 / 及其右边的字符串:(空值)

${file%.*}:删掉最后一个 . 及其右边的字符串:/dir1/dir2/dir3/my.file

${file%%.*}:删掉第一个 . 及其右边的字符串:/dir1/dir2/dir3/my

记忆的方法为:

#是 去掉左边(键盘上#在 $ 的左边)
%是去掉右边(键盘上% 在$ 的右边)

单一符号是最小匹配;两个符号是最大匹配
${file:0:5}:提取最左边的 5 个字节:/dir1
${file:5:5}:提取第 5 个字节右边的连续5个字节:/dir2

也可以对变量值里的字符串作替换:
${file/dir/path}:将第一个dir 替换为path:/path1/dir2/dir3/my.file.txt
${file//dir/path}:将全部dir 替换为 path:/path1/path2/path3/my.file.txt

shell运算符:

Shell 和其他编程语言一样,支持多种运算符,包括:

  • 算数运算符
  • 关系运算符
  • 布尔运算符
  • 字符串运算符
  • 文件测试运算符

具体参考:https://www.runoob.com/linux/linux-shell-basic-operators.html

shell的关键字:

关键字表
命令 含义
! 保留字,逻辑非
: 不做任何事,只做参数展开
. 读取文件并在shell中执行它
alias 设置命令或命令行别名
bg 将作业置于后台运行
bind 将关键字序列与readline函数或宏捆绑
break 保留字,跳出for、while、until、select循环
builtin 调用命令的内建命令格式,而禁用同名的函数。或者同名的扩展命令
case 保留字,多重选择
cd 切换当前工作目录
command 找出内建和外部命令;寻找内建命令而非同名函数
continue 保留字,到达下次for、while、until、select循环
declare 声明变量定义变量属性
dirs 显示当前存储的列表
disown 将作业从列表中移除
do 保留字,for、while、until、select循环的一部分
done 保留字,for、while、until、select循环的一部分
echo 打印参数
elif 保留字,if结构的一部分
else 保留字,if结构的一部分
enable 开启和关闭内建命令
esac 保留字,case的一部分
eval 将参数作为命令再次处理一遍
exec 以特定程序取代shell或为shell改变I/O
exit 退出shell
export 将变量声明为环境变量
fc 与历史命令一起运行
fg 将作业置于后台运行
fi 保留字,if循环的一部分
function 定义一个函数
for 保留字,for循环的一部分
getops 处理命令行选项
hash 记录并指定命令的路径名
help 显示内建命令的帮助信息
history 显示历史信息
if 保留字,if循环的一部分
in 保留字,case、for、select循环的一部分
jobs 显示后台运行的作业
kill 向进程传送信号
let 使变量执行算术运算
local 定义局部变量
logout 从Shell中注销
popd 从目录栈中弹出目录
pushd 将目录压入栈
pwd 显示当前工作目录
read 从标准输入中读取一行
readonly 将变量定义为只读
return 从函数或脚本返回
select 保留字,生成菜单
set 设置Shell选项
shift 变换命令行参数
suspend 终止Shell的执行
test 评估条件表达式
then 保留字,if结构的一部分
time 保留字,输出统计出来的命令执行时间,其输出格式由TIMEFORMAT变量来控制
times 针对Shell及其子Shell,显示用户和系统CPU的时间和
trap 设置扑捉程序
type 确定命令的源
typeset 声明变量,定义变量属性,与declare等价
ulimit 设置和显示进程占用的资源限制
umask 设置和显示文件权限码
unalias 取消别名定义
unset 取消变量或函数定义
until 保留字,一种循环结构
wait 等待后台作业完成
while 保留字,一种循环结构

猜你喜欢

转载自blog.csdn.net/qq_36800800/article/details/96851537
今日推荐