Shell学习笔记之基础部分

Shell基础:

查看操作系统支持的shell:

[root@rhel9 ansible]# cat /etc/shells
/bin/sh
/bin/bash
/usr/bin/sh
/usr/bin/bash

Shell的基本元素:

  1. 声明:声明用哪个命令解释器来解释并执行当前脚本文件中的语句,一般写的解释器为**#!/bin/bash**

  2. 命令:可执行语言,实现程序的功能

  3. 注释:说明某些代码的功能,通过添加注释提高代码的可读性

    1. 单行注释:

      #echo "hello world"
      
    2. 多行注释:

      :<<BLOCK
      ....
      BLOCK
      
  4. 赋予rx权限

Shell编程的规范:

  1. 脚本的文件名应见名知意

  2. 文件开头指定脚本解释器(#!/bin/bash)

  3. 开头加版本特权等信息

    #Date :创建日期
    #Author :作者
    #Mail:联系方式
    #Function :功能
    #version :版本
    
  4. 尽量不使用中文注释

  5. 多使用内部命令,常用命令如下:

    1. echo
    2. eval
    3. exec
    4. export
    5. read
    6. shift
    7. exit
  6. 代码缩进(使代码结构更加清晰)

内部命令:

echo:

echo是用于终端打印的基本命令,默认情况下,echo 在每次调用后会添加一个换行符

[root@kittod ~]# echo hehe
hehe
[root@kittod ~]# echo haha
haha
[root@kittod ~]# echo "Welcome to bash"
Welcome to bash
[root@kittod ~]# echo 'Welcome to bash'
Welcome to bash

上面的方法看起来效果一样,但是在某些场合会得到不一样的结果

[root@kittod ~]# echo "the current directory is `pwd`"
the current directory is /root
[root@kittod ~]# echo 'the current directory is `pwd`'
the current directory is `pwd`
[root@kittod ~]# echo "hehe;hehe"
hehe;hehe
[root@kittod ~]# echo hehe;hehe
hehe
-bash: hehe: command not found

Shell学习笔记之基础部分_第1张图片

设置字体颜色:
echo -e "\e[1;31m this is test \e[0m"
            设置为红色        把颜色还原

重置0,黑色30,红色31,绿色32,黄色33,蓝色34,洋红35,青色36,白色37

image-20230319102704392

eval:

**功能:**当shell程序执行到eval语句时,shell读入参数args,组合为一个新的命令。

exec:

exec命令能够在不创建新的子进程的前提下,转去执行指定的命令,当指定的命令执行完毕后,该进程就终止了。

export:

设置或导出环境变量

[root@kittod ~]# mingzi=hehe
[root@kittod ~]# echo $mingzi
hehe
[root@kittod ~]# bash
[root@kittod ~]# echo $mingzi
[root@kittod ~]# exit
exit
[root@kittod ~]# export mingzi
[root@kittod ~]# bash
[root@kittod ~]# echo $mingzi
hehe

read:

类似于C语言Scanf

read 命令可从标准输入读取字符串等信息,传给shell程序内部定义的变量。
read 是一个重要的 bash 命令,用于从键盘或标准输入读取文本,我们可以使用 read 命
令以交互形式读取来自用户的输入,不过 read 能做的远不止这些。

通常我们按下回车键表示命令输入完成,但是很特殊情况下,我们需要基于字符数或者
特定字符来表示命令输入完成。

-p prompt:设置提示信息
-t timeout:设置输入等待时间,单位默认为秒

#未等待
read -t 5 -p "Please enter your name:" name
Please enter your name:wgq
[root@rhel9 01]# echo $name
wgq
#等待
Please enter your name:[root@rhel9 01]# echo $name

[root@rhel9 01]#

-n 表示限定输入的字符数。

-s 输入不回显

[root@rhel9 01]# read -s var
[root@rhel9 01]# echo $var
wgq

-d 定界符输入,以什么符号结束输入

[root@rhel9 01]# read -d "." var
wgqzqj.[root@rhel9 01]#
[root@rhel9 01]# echo $var
wgqzqj
[root@rhel9 01]#

shift:

shift,在程序中每使用一次shift语句,都会使所有的位置参数依次向左移动一个位置,并使位置参数$#减1,直到减到0为止。

exit:

exit,退出shell程序。在exit之后可以有选择地指定一个数作为返回状态

执行shell脚本的方式:

交互式执行:

[root@localhost ~]# for filename in `ls /etc`
do
if echo "$filename" | grep "passwd"
then
echo "$filename"
fi
done

作为程序文件执行:

对于一组需要经常重复执行的Shell语句来说,将它们保存在一个文件中来执行。我们通常称这种包含多个Shell语句的文件为Shell脚本,或者Shell脚本文件。脚本文件是普通的文本文件,可使用任何的文本编辑器查看或修改Shell脚本。

[root@localhost ~]# mkdir /test
[root@localhost ~]# cd /test
[root@localhost test]# vim test1.sh
#!/bin/bash
for filename in `ls /etc`
do
if echo "$filename" | grep "passwd"
then
echo "$filename"
fi
done

执行脚本的方法:

bash ./filename.sh

(产生子进程,再运行,使用当前指定的bash shell去运行)

./filename.sh

(产生子进程,再运行,使用脚本里面指定的shell去运行。使用该种方式执行需要x权限)

source ./filename.sh

(source命令是一个shell内部命令,其功能是读取指定的shell程
序文件,并且依次执行其中的所有的语句,并没有创建新的子shell进程,所以脚本里面所有创
建的变量都会保存到当前的shell里面)

.filename.sh

(和source一样,也是使用当前进程执行)

注意

执行shell脚本时,如果使用1和2这种方式执行会在当前的进程下产生一个新的bash子进程,
所以子进程切换到了/tmp目录,当脚本结束,子进程也就结束了,所以当前进程的目录不会发生变化;3和4方式执行时,不会产生新的进程,所以脚本执行结束后当前的目录会变成 /tmp。

你可能感兴趣的:(Shell,运维,shell)