shell是什么,能干什么?
1.程序
狭义:操作系统程序和应用程序。
操作系统程序是用来调用监控内核的,在这个操作系统上面运行着所有我们可以应用的程序。
计算机的运行是这样一个联系(或是支持)
硬件==》内核 ==》操作系统 ==》 shell ==》程序
***内核 ==》操作系统 ==》 shell(我觉得他们都被包含在操作系统中)****
(这里我们只是从程序和作用的的角度看操作系统。大家说的linux操作系统是个大集合是一个全面的概念。就好比
china 是瓷器。也是中国)。
简化下: 硬件 ==》操作系统 ==》 程序
shell是一个命令解释器。处于linux的操作系统(内核)与应用程序之间。通过操作系统提供的方法解释并运行应用程序。
bash shell是centos默认的shell。包含简单的语法和环境。查看本机的shell类型 (echo $SHELL),查看shell的版本(
bash --version ).
shell脚本的开服环境
任何编辑器都可以。(类windows的记事本)centos下的vi或vim ,简单的操作也可以 echo "" >filename
shell的文件名:
其实,linux一切都是文件。不像window,以后缀名为区别。这里我们给的.sh 后缀是一种约定俗成的方式。方便
大家的识别和管理。因此,不加.sh也是没有问题的。
举个例子:
$ cat -n test_hello.sh
1 #!/bin/bash
2 #author:swallow
3 echo 'hello world'
shell的语法格式:
1 #! 这2个字符是shell解释器开始读取shell的开始符号。 /bin/bash 是在创建用户的时候。定义的shell的类型。关系到shell的运行环境。
2 # 是shell头部的注释内容一般是日期。作者。 如果是在shell脚本里面大段的#就是为了方便理解语法而写的注释。
3 echo 'hello world' 这些就是脚本的主体。就是一些基础命令或是if while for 等逻辑结构。
可以简单的理解:shell 主体就是一堆可以实现我们需要的功能的命令的集合。
shell的执行:
linux的文件权限体系由 r w x 组成。
如果有x权限的可以直接:用文件名来执行
一般用户创建的文件如果没有 x 权限没有办法执行的。
在练习的时候可以赋予权限: chmod +x test_hello.sh
或者通过 bash 或者 sh test_hello.sh (bash/sh 可以写全路径名 /bin/bash /bin/sh)
这里 sh 是bash 的软链接(类似于win的快捷方式)
$ ll /bin/sh
lrwxrwxrwx. 1 root root 4 Jan 18 15:01 /bin/sh -> bash
(了解linux的人,应该一目了然)
$ bash <test_hello.sh (这样子也可以)
如果在脚本里面 可以通过管道 | bash 执行
另一种方法就是: . 或者 source 本质是一样的(读入脚本并且执行)
举个例子比较下:source和 sh 的区别;
$ cat -n /home/swallow/test_source.sh
1 #!/bin/bash
2 #
3 cd /tmp
4 echo "the script is ok"
5 pwd
[swallow@swallow ~]$ sh test_source.sh
the script is ok
/tmp
[swallow@swallow ~]$ source test_source.sh
the script is ok
/tmp
[swallow@swallow tmp]$ ************用source执行完程序切换到/tmp目录下)
sh执行没由进入到/tmp ,而source 进入到/tmp目录下。
因为:sh命令在执行的时候shell会开启一个子进程。shell的执行在子进程里面执行。在我们
执行shell的时候实际还在父进程里面。而没有切到子进程下面。
而source 命令执行时直接在父进程里面执行没有开启新的子进程。一般如果脚本里面还包含其它的
shell脚本。建议,用source 执行。
查看shell的执行结果:
echo $?
一般为0 是正常执行。因为linux源于Unix。Unix里面的文件执行后释放进程的标记符里面0就代表成功.
查看当下的shell的具体环境可以通过: env 命令查看全局变量(系统级) set 命令输出所有变量。包括
全局变量和局部变量。declare 命令输出所有的变量,函数,整数,和已经导出的变量。
一般修改变量的方法:
在 /etc/profile 文件的结尾添加一句;
export PATH=/softwaredirectory/bin:$PATH
一般就是讲新安装软件的路径的bin目录放入/etc/profile 文件的末尾。并且重新定义PATH.为了不影响原
PATH 。一般的赋值写法: PATH=directory:$PATH (新目录和引用原来的目录)
几种引用的对比:"" ' ' $ ``
# var=123
# echo "$var"
123
# echo '$var'
$var
# echo $var
123# echo `date`
Sat Jan 21 16:29:15 CST 2017
# echo $(date)
Sat Jan 21 16:32:15 CST 2017
一般 单引号:比较直接里面是什么,就直接输出。 双引号遇到例如\ $ 会转义
·· 双反引号的作用和 $() 类似:一般用于命令的引用。
技巧: 生成有序列 {a..z} {1..100} seq 30
一个例子明白:$0:当前脚本名称 $$;脚本执行的PID $# :传入的参数的个数
$ vim test.sh
#!/bin/bash
#
echo -e "script name is : $0\n"
echo -e "pid is :$$ \n"
echo -e "sum_file is :$# \n"
$ sh test.sh test1 test2 test3
script name is : test.sh
pid is :26918
sum_file is :3