Shell编程指南_linux shell

基础知识

shell执行方式   sh xx.sh (文件须有r权限)  ||  ./xx.sh (文件须有x权限) 注:sh xx.sh方式比较安全
文件名后缀 .sh
shell内容开头 #!/bin/bash || #!/bin/sh || #!/bin/csh || #!/bin/ksh 注:#!/bin/bash 使用比较多
退出  exit 0

变量赋值与使用

不需要定义即可直接使用  注:变量赋值时=号两端不能有空格
以$变量名或${变量名}访问变量内容

流程控制

判断  注:确保方括号的空格 ; 确定每个条件都有then

复制代码 代码如下:

if [ –d ‘dirname' ];then
    命令集1
elif 条件2;then
    命令集2
else
     命令集4
fi

复制代码 代码如下:

case $变量 in
match_1 )
        命令集1
        ;;
match_2)
        命令集2
        ;;
……
*)(可选)
        命令集n
        ;;
esac

循环

1.while 条件

复制代码 代码如下:

do

        //TODO

done

2.until 条件

复制代码 代码如下:

do
    命令集
done

 
3.for ((初始值;条件;步进))

复制代码 代码如下:

do
    命令集
done

4.for 循环变量 in 变量列表

复制代码 代码如下:

do
    命令集
done

常用判断条件语句

判断文件类型

测试标志    语义    举例
-e    “文件或目录”是否存在    test –e $file_name
-f    “文件或目录”是否存在且为文件    test –f $file_name
-d    “文件或目录”是否存在且为目录    test –d “/boot”
-b    “文件或目录”存在且为块设备    test –b “/dev/sda1”
-c    “文件或目录”存在且为字设备    test –c “/dev/tty0”
-S    “文件或目录”存在且为Socket文件    test –S “/var/run/rpcbind.sock”
-p    “文件或目录”存在且为FIFO文件    test –p $file_name
-L    “文件或目录”存在且为链接文件    test –L $file_name

判断文件权限

测试标志    语义
-r    “文件或目录”是否存在且具有可读权限
-w    “文件或目录”是否存在且具有可写权限
-x    “文件或目录”是否存在且具有可执行权限
-u    “文件或目录”存在且具有SUID的属性
-g    “文件或目录”存在且具有SGID的属性
-k    “文件或目录”存在且具有Sticky bit的属性
-s    “文件或目录”存在且为非空文件

文件之间比较

测试标志    语义
-nt    “文件名1”是否比”文件名2”新 (newer than)
-ot    “文件名1”是否比”文件名2”旧(older than)
-ef    判断”文件名1”和”文件名2”是否为同一个文件,主要用来判断硬链接,即两个文件是否指向同一个inode节点

整数之间比较

测试标志    语义
-eq    两数相等(equal)
-ne    两数不等(not equal)
-gt    整数1大于整数2(greater than)
-lt    整数1小于整数2(less than)
-ge    整数1大于等于整数2(greater than or equal)
-le    整数1小于等于整数2(less than or equal)

与、或、非
测试标志    语义
-a    (and) 两个条件同时成立则返回true  test –e file1 –a –d file2
-o    (or)两个条件任意一个成立则返回true  test –r file1 –o –x file2
!    (非)当前条件取非  test ! –d file1

控制结构

计算整数变量值

expr  注: 运算符号和参数之间要有空格分开;通配符号(*),在作为乘法运算符时要用\;
let 例子:let s=(2+3)*4

时间: 2024-09-17 02:02:32

Shell编程指南_linux shell的相关文章

Shell编程学习:Shell子程序结构和函数

函数可以简化代码,实现脚本代码重用.一次定义可以多次调用.结构化编程,增强可读性,可以将功能定义为多个函数,然后保存在一个文件中,然后在~/bashrc或者在命令行使用source(.)调用这个文件.加快运行速度 1.定义函数的方法(传统风格) function name{ } C语言风格: name(){ } 推荐使用C语言风格,兼容性好,可以在csh/tsch中使用 函数中return和exit的区别,return退出执行,返回到主程序函数之后继续执行 exit直接退出当前脚本. shell

Linux shell知识点汇总_linux shell

实际上Shell是一个命令解释器,它解释由用户输入的命令并且把它们送到内核.不仅如此,Shell有自己的编程语言用于对命令的编辑,它允许用户编写由shell命令组成的程序.Shell编程语言具有普通编程语言的很多特点,比如它也有循环结构和分支控制结构等,用这种编程语言编写的Shell程序与其他应用程序具有同样的效果. 引言 SHELL在处理一些问题的时候有得天独厚的优势,快捷方便,学会了还可以显摆显摆,当然了,shell的语法有点坑爹,没有系统的学过,只能一点一点的积累. 今天这个是在实现一个刷

linux shell 管道命令(pipe)使用及与shell重定向区别_linux shell

看了前面一节:linux shell数据重定向(输入重定向与输出重定向)详细分析 估计还有一些朋友是头晕晕的,好复杂的重定向了.这次我们看下管道命令了.shell管道,可以说用法就简单多了. 管道命令操作符是:"|",它仅能处理经由前面一个指令传出的正确输出信息,也就是 standard output 的信息,对于 stdandard error 信息没有直接处理能力.然后,传递给下一个命令,作为标准的输入 standard input. 管道命令使用说明: 先看下下面图: comma

判断文件是否存在的shell脚本代码_linux shell

实现代码一. #!/bin/sh # 判断文件是否存在 # link:www.jb51.net # date:2013/2/28 myPath="/var/log/httpd/" myFile="/var /log/httpd/access.log" # 这里的-x 参数判断$myPath是否存在并且是否具有可执行权限 if [ ! -x "$myPath"]; then mkdir "$myPath" fi # 这里的-d

更改linux用户登录shell的操作方法_linux shell

1.查看机器安装了哪些shell? 有两种方法可以查看. 第一种: [rocrocket@wupengchong ~]$ chsh -l  /bin/sh /bin/bash /sbin/nologin /bin/zsh 第二种: [rocrocket@wupengchong ~]$ cat /etc/shells  /bin/sh /bin/bash /sbin/nologin /bin/zsh 其实chsh -l也是来查看这个文件. 2.查看当前正在使用的shell是哪个? [rocrock

Linux下一些常用的Shell脚本整理_linux shell

如何计算当前目录下的文件数和目录数         # ls -l * |grep "^-"|wc -l ---- to count files # ls -l * |grep "^d"|wc -l ----- to count dir         如何只列子目录?     ls -F | grep /$ 或者 alias sub = "ls -F | grep /$"(linux) ls -l | grep "^d" 或

分享一个入门级可控多线程shell脚本代码_linux shell

说到shell可控多线程,网上分享的大部分是管道控制的方案.这种方案,张戈博客也曾经实战并分享过一次:<Shell+Curl网站健康状态检查脚本,抓出中国博客联盟失联站点>,感兴趣的朋友可以看看. 分享一个入门级可控多线程shell脚本方案 下面张戈博客再分享另一种更容易理解的入门级可控多线程shell脚本方案:任务切割.各个击破. 先来 1 段场景描述: 某日,在鹅厂接到了这个任务,需要在Linux服务器中,对几千个IP进行一次Ping检测,只要取得ping可达的IP就好.如果单个IP去pi

对用户输入的判断的shell实现代码_linux shell

今天的案例是将 对用户输入的判断的 #!/bin/sh # validint -- Validates integer input, allowing negative ints too. function validint { # Validate first field. Then test against min value $2 and/or # max value $3 if they are supplied. If they are not supplied, skip these

Linux shell编程 13 ---- 子Shell与进程处理

    Linux是一种用户控制的多作业操作系统,系统允许多个系统用户同时提交作业,而一个系统用户又可能用多个Shell登录,每个系统用户可以用一个Shell提交多个作业    1 子Shell     1 父子Shell是相对的,它描述了两个Shell进程的fork关系,父Shell指在控制终端或窗口给出提示符的进程,子Shell是由父Shell创建的进程,在Linux中,只有一个函数可以创建子进程,那就是fork函数          2 圆括号结构能够强制将其中的命令运行在子Shell中,