Shell 脚本

原创
02/26 09:29
阅读数 128

1、什么是shell?实际上Shell是一个命令解释器,是用户与内核进行交互操作的一种接口,它解释由用户输入的命令并且把它们送到内核去执行。
    ①/etc/shells文件保存了系统存在哪些shell,linux默认是使用bash,打开终端的时候,系统会开启一个shell进程,注意终端不是shell。
    ②在终端上输入其他shell的名称即可切换到该shell。

    ③输入env,可以查看环境变量的一些配置,其中就有当前使用的是哪种shell。
    ④修改当前系统使用的shell:chsh -s 输入新shell

2、shell本地变量

①变量的定义:输入变量名=值即可定义一个变量,变量名由字母、数字、_命名,不能数字开头,=两边不能有空格。这里定义的变量叫本地变量,只会影响当前的shell,不会影响任何的子shell

②查看变量:echo $变量名

③取消变量:unset 变量名

④查看当前shell的id:echo $$

   输入bash,会打开一个子shell

3、环境变量

① 定义环境变量:export 变量名=值 或 declare -x 变量名=值

$PATH,

   env,               查看环境变量

   export             查看环境变量

   set                    显示所有定义的环境变量

   $HOME,         当前用户的家目录路径

   $USER,              当前登录的用户

   $HISTORYSIZE, 记录历史命令的大小

   $PS1                 提示符变量

    $PS2                 >,即命令换行时显示的字符

    $LANG              查看当前系统编码

4、未知变量

    在shell脚本中的,$0表示脚本文件的名称;$1,表示第一个参数,$n,表示第n个参数;$#参数的个数;$*表示所有的参数

 

6、数组array,

   定义数组:数组名=(元素1 元素2 元素3),元素之间以空格隔开

   ${数组名[下标]}:取数组的下标所在的值

   ${数组名[*]}  或  ${数组名[@]}:查看数组所有的元素

 

    ${!数组名[*]}:查看数组所有的下标

   ${#数组名[*]}:查看数组的长度  
7、declare 可以用来定义一个环境变量
定义环境变量:declar -x 变量名=值
取消环境变量:declar +x 变量名
declar -r 变量名,设置变量只读
declar -i 变量名,将变量定义成整数型,方便数字运算

readonly 变量名,设置变量只读

let 变量名=数字1 +数字2,let可以直接做数字运算 ,let可以用( ())来代替,例如:cc=((1+8))
8、当变量出现在双引号里时,变量会被正常解析,当变量出现在单引号里,则变量会被按字符串输出, 引用变量最好将变量 用{}括起来,如,echo ${test} ;命令嵌套时需要将嵌套的命令用反引号(·)括起来。

9、脚本的三种执行方式

 ./xx.sh             在子shell中执行

                bash xx.sh     在子shell中执行

                source xx.sh  是在当前的shell下去执行的

     echo $$表示显示当前脚本的PID

10、 命令执行的判断依据:  ;    &&   ||

     敲多个命令用分号;隔开,但是这两个命令直接是没有任何关系的,如date;cal。 第一个命令的执行结果跟后面的命令是没有任何关系的,无论是对还是错               

     命令1 && 命令2 :只有两个都为真时才能执行成功

     命令1 || 命令2:两个命令只要有一个为真,整体就为真。如果第一个命令执行正确的话,第二个就不会执行了;如果第一个错误,然后才会执行第二个命令

11、数据重定向

(1)输出重定向

①>和>>,只能输出正确命令的执行结果到文件中,

cal > calendar.log,将日历输出到calendar.log这个文件,如果文件不存在则创建,若已存在则覆盖里面的内容

cal >> calendar.log,将内容追加到文件中

②2>和2>>,只能输出错误命令的执行结果到文件中

③&>和&>>,错误的正确的都输出到文件中

④ 1>&2,正确的要向错误的一样能够导入

    2>&1,错误的,要像正确的一样导入

⑤双向重定向:tee

    tee与>符号一样,会覆盖原有的内容,如果是要追加,需要加上-a选项

(2)输入重定向:<,<<

        tr 'a-z' 'A-Z' <hosts:将hosts里的都转换成大写

展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部