管理整个硬件的是核心(kernel),用户通过shell来与核心沟通,让核心达到我们所想要的目的。
而shell是人类语言与内核直接的桥梁,通过它才能控制内核,进而控制硬件。
linux默认的shell是/bin/bash shell
它的主要功能有:命令记忆、命令补全、命令别名、通配符等。
内部命令和外部命令的区别:
linux命令有内部命令和外部命令之分。内部命令实际上是shell程序的一部分,其中包含的是一些比较简练的linux系统命令,这些命令由shell程序识别并在shell程序内部完成运行,通常在linux系统
加载运行时shell就被加载并驻留在系统内存中。外部命令是linux系统中的实用程序部分,因为实用程序的功能通常都比较强大,所以它们包含的程序量也会很大,在系统加载时并不随系统一起被加载
到内存中,而是在需要时才将其调进内存。通常外部命令的实体并不包含在shell中,但是其命令执行过程是由shell 程序控制的。shell程序管理外部命令执行的路径查找、加载存放,并控制命令的执
行
内部命令是指shell中的内置指令。并要需要安装就可以使用,默认情况下bash共有50几个内置命令。
而外部命令与其相反,并不属于shell本身。并不一定有的系统中就有。而且有的可以通过软件包安装得到
shell脚本就是将一些命令汇总起来,一次执行,不需要编译。
脚本的注意事项:
1.如果读取到一个enter(CR),就尝试开始执行该行命令;
2.如果一行内容太多,则可以使用\enter来扩展至下一行;
3.#是行注释;
4.#!/bin/bash,用来声明这个脚本所使用的shell名称,以便在执行该脚本时,加载相关shell的环境设置文件
数值运算可以使用 declare -i total=$no1*$no2 也可以使用
var=$(($no1*$no2))
$? 用于检测上一次命令执行后的状态
为0时,表示true,大于0时表示false
echo $? 可以这样读取
test 命令用于检测文件及相关属性是否存在,返回为真或假
test -e sh01.sh //判断文件名是否存在(如果该文件存在,返回true,不存在返回false)
test -f sh01.sh//判断文件名是否为文件;
test -d sh01.sh//判断是否为目录(如果是目录返回true,如果不存在,或者不是目录则返回false)
test file1 -nt file2 //判断file1是否比file2新,new than
test file1 -ot file2 //判断file1是否比file2旧
test file1 -ef file2//判断是否为同一文件
test str1 = str2 //比较两个字符串是否相等,等号两边要有空格
test str1 != str2 //比较是否不同
test -z string //判断该变量是否设置,若没设置则为true,例如 [ -z "$cxm3" ] cxm3变量没设置,返回true,[ -z "" ]字符串为空,同样返回true
test -n string //这个和上面的相反,没有设置返回false,-n可以省略
使用test的地方,也可以使用[]中括号
例如:[ -e sh01.sh ]
但必须注意,
1)每个组件必须使用空格隔开,且中括号内的变量最好使用双引号来设置
2)中括号比较字符串相等时,要用两个=号,例如:[ "$cxm1" == "$cxm2" ],其实用一个等号也可以,但习惯上两个等号是逻辑判断;
3)中括号内还可以输入多个条件,用-o连接,表示或的意思 [ "$y" = "y" -o "$y" = "Y" ]
可以在脚本后面直接加参数,它们的对应关系是这样:
/etc/init.d/zxesb start restart stop
$0 $1($@) $2 $3
$1可以提取第一个参数的值($1可以用$@替换)
echo -n 参数表示它后面的命令跟在这一行之后显示,不是另起一行显示,例如
echo -n hello
echo world
显示为 hello world
条件判断:
if [] || [];then
echo "OK"
elif []; then
echo "en"
else
echo "hao"
fi
注意,条件判断以分号结束
case...esac判断,例如:
case $1 in
"hello")
echo "sdfs"
;;
"")
echo "sdfess"
;;
*) //如果变量内容不是上面所有的内容,就执行下面的语句
echo "sdfs”
;;
esac
上面就是例子
例如:
case "$ans" in
y*|Y*) 表示以y或Y开头
return 0
;;
*)
return 1
;;
esac
脚本中变量的获取,有2种方式:
1.直接获取式(在执行脚本命令时,通过其后面的参数获取,大多数/etc/init.d/程序都是这样);
2.交互式(通过read命令);
定义函数的格式为:
函数名()
{
命令1
. . .
}
或者
函数名(){
命令1
. . .
}
两者方式都可行。如果愿意,可在函数名前加上关键字f u n c t i o n,这取决于使用者。
f u n c t i o n 函数名()
{ ...
}
可以将函数看作是脚本中的一段代码,但是有一个主要区别。执行函数时,它保留当前
shell和内存信息。此外如果执行或调用一个脚本文件中的另一段代码,将创建一个单独的
shell,因而去除所有原脚本中定义的存在变
函数的设置一定要在程序的最前面,这样才能在执行时找到可用的程序段
在函数里面,也可以使用 $1、$2等来引用函数名称后面的变量,例如:
fname 1,这个1就可以通过$1来引用
调用函数时,直接写函数名称不加括号,例如
fname;
即可调用函数
循环有3种
while [] //但条件满足时
do
程序段
done
until []//但条件不满足是
do
done
for((int=1;i<=100;i=i+1))
do
done
还有一种:
for animal in dog cat elephant
do
echo "sdfsf"
done
每次循环,aninal分别取dog、cat、elepant等
filelist=`ls $dir'
for filename in $filelist
do
done
例1:
num=0
for((i=0;i<100;i++))
do
num=$((num+i))
#或者 num=$(($num+$i))
done
是数字类型,在计算时可以加$,也可以不加
例2:
Rosetta_path=/home/test/test.txt
if [ -e $Rosetta_path ] ;then //这个地方可以对变量加双引号,也可以不加
mv $Rosetta_path $dirnameBak
Log "[~3.Backuping old file is successful.$Rosetta_path~]"
else
Log "[~3.There is no corresponding the file.$Rosetta_path~]"
fi
判断文件是否存在,存在返回true,不存在返回false
例3
判断数值类型是否大于10,大于返回true,小于等于返回false
if [ $FILENUM -gt 10 ]; then //这个地方可以对变量加双引号,也可以不加
Log "[~2.Clear very old files aready.~]"
else
Log "[~2.There are no very old files.~]"
fi
-eq 等于
-ne 不等于
-gt 大于
-ge 大于等于
-lt 小于
-le 小于等于
但建立一个新的文件或目录时,它的默认属性是什么呢?这与umask有关
查看方式有2种:
umask //以数字方式查看,第一组是特殊权限用的,暂不管他
umask -S//以字符方式查看
在默认权限上,文件和属性是不一样的,文件没有有x权限,目录有x权限
umask以数字方式显示时,表示默认权限需要减掉的权限。当要去掉w时,就输入2;要去掉r权限就输入4;要去掉rw权限就输入6;
如果umask为022
建立文件时:文件所有者为默认权限rw,没有减掉;用户组减掉w权限(默认也是rw);其他用户减掉w权限(默认也是rw);
建立目录时:目录所有者为默认权限rwx;其他和上面一样了,用户组和其他用户默认也是(默认也是rwx)
如果想改变默认的权限,直接在umask后面写上要数字即可,例如:
umask 002
分享到:
相关推荐
资源名称:Linux Shell脚本学习基础视频资源目录:【】11a00d99b60c4e2eba3440b8aa3a6bdd【】linux_shell脚本编程_01认识shell,如何编写shell脚本和执行【】linux_shell脚本编程_02vivim简单的常用操作【】linux_...
Shell脚本,作为Linux/Unix系统中的编程工具,是一种强大的自动化任务执行手段。它基于Bourne shell或者其扩展版本,如bash(Bourne-Again SHell),提供了一种编写简单或复杂程序的方式,使得用户能够通过命令行...
Shell脚本合集 Shell脚本是一种脚本语言,利用Shell的命令解释的功能,对一个纯文本的文件进行解析,然后执行这些功能。 Shell脚本可以直接使用在Windows、Unix、Linux上面,并且可以调用大量系统内部的功能来解释...
IDEA中编写并运行shell脚本的实现 IDEA中编写并运行shell脚本的实现是指在Integrated Development Environment(IDE)中编写、配置和运行shell脚本的过程。该过程需要安装bashsupport插件,配置插件,安装git软件,...
我该如何在shell脚本中得到PID。 当我在执行shell脚本时,它会启动一个叫子shell的进程。作为主shell的子进程,子shell将shell脚本中的命令作为批处理运行(因此称为“批处理进程”)。 在某些情况下,你也许想要...
Shell脚本是Linux/Unix操作系统中的强大工具,它允许用户编写一系列命令,形成自动化任务,以提高工作效率。本文档收集了250个实用的Shell脚本实例,涵盖了多个应用场景,包括系统管理、安全防护、数据库备份等核心...
Shell脚本编程是Linux系统管理中的重要技能,它允许用户自动化执行一系列命令,大大提高工作效率。以下是一些关于Shell脚本编程的关键知识点: 1. **Hello World脚本**:这是所有编程语言的基础,用于验证环境设置...
shell脚本编程100例 Shell脚本编程是一种强大的编程语言,广泛应用于Linux和Unix操作系统中。本书《shell脚本编程100例》为读者提供了100个实战性的shell脚本编程实例,涵盖了检测网段主机状态、猜数字游戏、打印...
在Android系统中,由于安全性和权限的限制,直接调用shell脚本并不像在Linux或Unix环境下那样简单。然而,对于非root用户来说,确实有一些方法可以实现对shell脚本的调用,尤其是在开发和调试过程中。下面我们将深入...
**C语言中文网shell脚本教程** 这是一份关于Shell脚本编程的离线学习资料,包含了一系列HTML文件,旨在帮助用户深入理解并掌握Linux Shell脚本编程技术。以下是其中涉及的一些关键知识点: 1. **Shell命令的本质**...
"shell脚本与Makefile区别" shell 脚本和 Makefile 是两个不同的工具,它们都用于自动化构建和编译过程,但是它们有很大的不同之处。本文将详细介绍 shell 脚本和 Makefile 的区别。 首先,shell 脚本和 Makefile ...
Android 系统或 Android 应用执行 shell 脚本的方法 Android 系统或 Android 应用执行 shell 脚本是 Android 开发中的一项重要技术,通过执行 shell 脚本,可以实现一些复杂的操作,例如设置网络参数、启动服务等...
### 解决Unity不能调用shell脚本传递参数的问题 在Unity开发过程中,有时我们需要与操作系统进行交互,例如执行shell脚本来处理一些特定的任务。但在实际操作中,可能会遇到Unity无法正确调用shell脚本并传递参数的...
Shell脚本是Linux系统中的一种强大工具,它允许用户通过编写命令行指令序列来执行自动化任务。在这个场景中,我们讨论的是一个特定的Shell脚本,它的目标是生成二维码图片。在旧有的系统中,如果没有源码可供修改,...
cat /mnt/log_function.sh #!/bin/bash #log function ####log_correct函数打印正确的输出到日志文件 function log_correct () { DATE=`date “+%Y-%m-%d %H:%M:%S”` ####显示打印日志的时间...log_error打印shell脚本
Linux Shell 脚本编程基础知识点总结 Linux 脚本编写基础 1.1 语法基本介绍 * `#!` 符号用来告诉系统它后面的参数是用来执行该文件的程序 * 在 Linux 中,使用 `/bin/sh` 来执行程序 * 编辑好脚本后,需要使其可...
在Linux环境下,shell脚本是自动化任务的强大工具,尤其对于数据导出这样的操作,通过编写shell脚本可以方便地实现定期备份或者按需导出。本文将深入讲解如何使用shell脚本来实现数据的导出,并结合Java代码进行调用...
《Linux命令行与Shell脚本编程大全》是一本专为Linux初学者编写的经典教材,旨在帮助读者深入理解和掌握Linux操作系统中的基本命令行操作以及Shell脚本编程技术。这本书全面覆盖了从基础到进阶的各种主题,对于想要...
**高级Shell脚本编程** Shell脚本编程是Linux/Unix系统中的重要技能,它是一种用于自动化任务、管理系统和实现批处理操作的脚本语言。在Linux环境中,Bash(Bourne-Again SHell)是最常用的Shell,它扩展了原始的...
Shell脚本是Linux系统中的一种强大工具,它允许用户通过编写简单的命令行指令组合来实现自动化任务。在《shell脚本100例(最新版).pdf》这本书中,作者详细介绍了各种实用的Shell脚本案例,涵盖了从基础语法到高级...