操作电脑硬件的是操作系统,linux内核真正的理解的是对计算机底层cpu要做什么操作?
于是就有解释层:包在外部的壳。
linux执行命令的时候使用的都是bash
一
脚本开头一般指定当前的解析器
#!/bin/bash
echo “hello world”
执行命令:
1.bash 路径hello.sh 或者 sh hello.sh
2.使用路径来进行执行 相对路径和绝对路径 ./hello.sh 这种方式打开了子bash,当文件里的变量是全局变量的时,子bash也可以查看
3.source hello.sh . hello.sh source 不打开另外一个shell,没有父子shell的嵌套环境
子shell里设置的环境变量在父shell里是不可见的
shell里的变量一大类是系统定义好的,一大类是用户定义的
全局变量和局部变量
env
查看当前系统帮我们定义的全局环境变量的值
printuser USER
不需要加$直接查看环境变量的值
set
查看系统设置的全部变量
unset
删掉变量,但是只读变量不能被删除
自定义变量:变量名= 变量值(等号前后不能有空格)
my_var =100
echo $my_var
以上定义的是局部变量
那么如何定义全局变量呢?
export
export
export my_var 声明其是全局变量
ps -f
使用ps-f命令查看到底是在父进程还是在子进程中
图片显示在子子进程中
exit
在子进程中退出,回到父进程
二
定义变量的值默认是字符型,不是数值。想要进行数值的计算
a= ( ( 1 + 5 ) ) a = ((1+5)) a= ((1+5))a=[1+5]
只读变量
readonly b=5
只读变量,不能更改
shift + g 跳到最后
cp hello.sh /bin/
hello.sh
直接使用文件名字执行命令发现执行不了,但是把sh文件放到bin目录底下,在使用名字进行hello.sh进行执行命令发现执行了了
但是bin目录都是系统本身。所以可以把写脚本的文件添加到系统环境变量PATH
有时候想要把参数传给脚本,则在脚本文件中写$1,在执行命令的时候hello.sh xiaoli 此时把xioali传给了$1
mv
复习一下 mv parameter parameter.sh 修改文件名
chmod +x hello.sh
修改文件权限为可执行
$#
获取当前参数的的个数
for循环
for ((初始值;循环控制条件;变量变化))
do 程序
done
在(())里边可以直接跟一个数学的运算式
约定俗称for后边跟(())
for 变量 in 值1,值2,值3
do 程序
done
{1…100}代表1-100的意思
for i in {1…100};do sum= [ [ [sum + $i];done ;echo $sum 类似于java的增强for循环
$* $@ 不被引号引起来的时候使用的时候没有任何区别
#!/bin/bash
echo '*****************$********************'
for para in "$*"
do
echo $para
done
echo '*****************$********************'
for para in "$@"
do
echo $para
done
~
@ 和 @和 @和* 没有被双引号引起来的时候,两个输出没区别,但是引号引起来之后,*的输出内容按照一行输出。
要想在vim中正确显示$可以在两边包上‘’单引号
while循环
while [ 条件判断式 ]
do
程序
done
输入控制
read -t 10 -p “请输入自己的名字”: name
echo $name
运行该脚本,提示自己输入自己的名字,提示10s之后关闭