Linux_Bash脚本基础

简介: 目录目录Bash使用基础if 语句运算符逻辑表达式不将执行指令的结果显示出来echo 语句从Bash接受输入参数Case语句循环for 语句While语句内置变量和函数AWK CommandBash使用基础1.

目录

Bash使用基础

1. 显示脚本的执行的详细步骤:

sh -x shellScript.sh

2. 判断一条指令是否执行成功

netstat -lpntu | grep 80
echo $?
    #If output=0 --> 执行指令成功
    #If output=1 --> 执行指令不成功

if 语句

格式:

if [ Param1 逻辑运算符 Param2 ]
    then
    commands1
    elif
    commmands2
    else
    commands3
fi

Example:

############################    判断服务启动状态
service httpd start &> /dev/null
service httpd status &> /dev/null
    if [ $? -eq 0 ]
        then
        echo "start httpd successfully!"
        else
        echo "start httpd faild!"
    fi
############################# SCRIPT END

运算符

$:Shell 中的特殊变量
    a. $0 --> 表示Shell或Shell Script的名字
    b. $* --> 以一对双引号给出参数列表
    c. $@ --> 将各个参数分别加双引号返回
    d. $# --> 表示参数的个数
    e. $! --> 代表最后执行的后台指令的PID 
    f. $$ --> 代表所有指令的PID
    g. $_ --> 表示上一个命令的最后的一个参数
    h. $? --> 代表上一个指令执行后的退出状态
    i. $Number --> 代表脚本名后跟这第Number个参数
''"": 单双引号表示字符 
``: 撇号表示执行``中的指令后返回的结果,并且以列表的形式存放,可以结合for循环语句,将指令执行的结果作为循环的条件

逻辑表达式

    -gt --> > greater than 大于
    -ge --> >= greater equal 大于等于
    -lt --> < less than 小于
    -le --> <= less equal 小于等于
    -eq --> = 等于
    -ne --> != not equal 不等于    
    -z --> null 为空
    -f --> 判断是否存在

Example:
判断是否存在D/N.tar.$H文件 –> 判断是否存在 -f

if [-f $D/$N.tar.$H]

不将执行指令的结果显示出来

Commands &> /dev/null
Example:

service httpd start &> /dev/null

echo 语句

不换行显示:

echo -n
echo -n "HI Jmilk!" ; echo "How are you?"

获取变量内的体积

echo ${#names}

从Bash接受输入参数

########################## 从Bash接受一个参数,再返回一个输出
    read -p "Ple input the parameter !" param
    echo -n "Parameter is "
    echo $param
########################## SCRIPT END

Case语句

一般用于程序启动脚本
Syntax:

case $1 in
    Param1)
        Commands
        ;;
    Param2)
        Commands
        ;;
    *)
        Commands
    esac

Example:

#!/bin/bash -e
#/bin/bash -e 表示系统发生第一个错误时就中止脚本执行
#每个被chkconfig管理的服务需要在对应的init.d下的脚本加上两行或者更多行的注释。
# chkconfig:35 12 45
#第一行告诉chkconfig缺省启动的运行级以及启动和停止的优先级。如果某服务缺省不在任何运行级启动,那么使用 – 代替运行级。
# description:Service start script
#第二行对服务进行描述,可以用\ 跨行注释。
RETVAL=0
case $1 in
start)
  echo "service starting..."
  ;;
stop)
  echo "service stopping..."
  ;;
restart)
#$0 meating is this one script
  sh $0 stop || true
# $0 stop || ture  表示出现错误时候不想中止的指令
  sh $0 start
  ;;
*)
  echo "input syntax error!"
  echo "Usage:Is [start|stop|restart]"
  exit 1
  ;;
esac
echo $RETVAL
###################################SCRIPT END

循环

for 语句

格式1:

for VariableName in Parameter1 Param2 Param3
do 
    commands
done

格式2:

for ((初始值;限制值;执行步进))
do
     commands
done

Example:

#################################### 批量创建用户
#!/bin/bash
n=`cat /root/userList.txt`
#``内的指令结果赋值给vairable n
for name in $n
do
useradd $name
echo 123 | passwd --stdin $name
done    
###################################### SCRIPT END

While语句

格式:

while 条件
do
    commands
done

Example:

##################################### 猜价格脚本
#!/bin/bash
num=`echo $((RANDOM%1000+1))`
echo "Welcome use!"
while true
do
read -p "input a number(1-1000)" n
let t++
if [ $n -eq $num ]
    then echo "Right!The price is {num}}"
    echo "You make a guess at ${t}"
    break
elif [ $n -gt $num ]
    then echo "greater then"
else
    echo "less then"
fi
done
###################################### SCRIIPT END

内置变量和函数

    a. 获取随机数 RANDOM:
        echo $RANDOM
        echo $((RANDOM%100+1)) #生成1-1000的随机数
    b. 判断是否为整型:
        num.isdigit(variableName)
    c. 定义列表
        list=[vairabe1,variable2
    d. 为列表添加元素
        list.append('%s' % variableName)
    e. 从列表中删除一个数
        listTableName.remove('%s' % variable)
    f. 从列表中随机选取一个数
        c=random.choice(listTableName)
    g. 判断一个元素是否在列表中
        if 'variabeName' in list listTableName

AWK Command

awk 就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理。
工作原理:读入并分割有’\n’换行符的的一天记录,再将这条记录以(-F ” “)指定的特定分割符来划分出域,填充域,最后使用Number 来选择显示第几个域并{printNumber} 显示。没有-F指定特定分隔符时,默认分隔符为”空白键” 或 “[tab]键”。

grep ^user /etc/passwd | awk -F : '{print $1}'| grep -v ^root
相关文章
|
3月前
|
安全 Linux Shell
Linux上执行内存中的脚本和程序
【9月更文挑战第3天】在 Linux 系统中,可以通过多种方式执行内存中的脚本和程序:一是使用 `eval` 命令直接执行内存中的脚本内容;二是利用管道将脚本内容传递给 `bash` 解释器执行;三是将编译好的程序复制到 `/dev/shm` 并执行。这些方法虽便捷,但也需谨慎操作以避免安全风险。
205 6
|
4月前
|
Linux
在Linux中,怎么把脚本添加到系统服务里,即用 service 来调用?
在Linux中,怎么把脚本添加到系统服务里,即用 service 来调用?
|
1月前
|
Ubuntu Linux Shell
Linux 系统中的代码类型或脚本类型内容
在 Linux 系统中,代码类型多样,包括 Shell 脚本、配置文件、网络配置、命令行工具和 Cron 定时任务。这些代码类型广泛应用于系统管理、自动化操作、网络配置和定期任务,掌握它们能显著提高系统管理和开发的效率。
|
1月前
|
运维 监控 Shell
深入理解Linux系统下的Shell脚本编程
【10月更文挑战第24天】本文将深入浅出地介绍Linux系统中Shell脚本的基础知识和实用技巧,帮助读者从零开始学习编写Shell脚本。通过本文的学习,你将能够掌握Shell脚本的基本语法、变量使用、流程控制以及函数定义等核心概念,并学会如何将这些知识应用于实际问题解决中。文章还将展示几个实用的Shell脚本例子,以加深对知识点的理解和应用。无论你是运维人员还是软件开发者,这篇文章都将为你提供强大的Linux自动化工具。
|
2月前
|
运维 Java Linux
【运维基础知识】Linux服务器下手写启停Java程序脚本start.sh stop.sh及详细说明
### 启动Java程序脚本 `start.sh` 此脚本用于启动一个Java程序,设置JVM字符集为GBK,最大堆内存为3000M,并将程序的日志输出到`output.log`文件中,同时在后台运行。 ### 停止Java程序脚本 `stop.sh` 此脚本用于停止指定名称的服务(如`QuoteServer`),通过查找并终止该服务的Java进程,输出操作结果以确认是否成功。
63 1
|
2月前
|
Devops 关系型数据库 大数据
1000个开源免费的bash脚本合集
【10月更文挑战第4天】
|
3月前
|
Oracle Java 关系型数据库
Linux下JDK环境的配置及 bash: /usr/local/java/bin/java: cannot execute binary file: exec format error问题的解决
如果遇到"exec format error"问题,文章建议先检查Linux操作系统是32位还是64位,并确保安装了与系统匹配的JDK版本。如果系统是64位的,但出现了错误,可能是因为下载了错误的JDK版本。文章提供了一个链接,指向Oracle官网上的JDK 17 Linux版本下载页面,并附有截图说明。
Linux下JDK环境的配置及 bash: /usr/local/java/bin/java: cannot execute binary file: exec format error问题的解决
|
3月前
|
人工智能 监控 Shell
常用的 55 个 Linux Shell 脚本(包括基础案例、文件操作、实用工具、图形化、sed、gawk)
这篇文章提供了55个常用的Linux Shell脚本实例,涵盖基础案例、文件操作、实用工具、图形化界面及sed、gawk的使用。
733 2
|
2月前
|
存储 Shell Linux
【Linux】shell基础,shell脚本
Shell脚本是Linux系统管理和自动化任务的重要工具,掌握其基础及进阶用法能显著提升工作效率。从简单的命令序列到复杂的逻辑控制和功能封装,Shell脚本展现了强大的灵活性和实用性。不断实践和探索,将使您更加熟练地运用Shell脚本解决各种实际问题
36 0
|
3月前
|
Shell Linux 开发工具
linux shell 脚本调试技巧
【9月更文挑战第3天】在Linux中调试shell脚本可采用多种技巧:使用`-x`选项显示每行命令及变量扩展情况;通过`read`或`trap`设置断点;利用`echo`检查变量值,`set`显示所有变量;检查退出状态码 `$?` 进行错误处理;使用`bashdb`等调试工具实现更复杂调试功能。