Bash shell 基础

工作中经常需要用Shell写一些脚本用于测试,但是每次写shell,我都痛苦不已,因为shell的语法形式太杂乱,各种括号,各种$XX,搞得我每次写完脚本,都得花大把时间解决语法格式错误。

为了解决这个问题,提高写shell的效率,我把一些shell常用的demo,总结出来,方便我以及各位读者查阅哈!

字符串连接

sh_strcat() {    #method 1
   local str="strcat"
   local str2="helo"
   echo "strcat method1: ${str} ${str2}"

#method 2
   echo "strcat method2:" ${str} ${str2}}

获取字符串长度

sh_strlen() {    local str="strlen"
   echo "strlen: ${#str}"}

截取字符串

sh_substr() {    local substr="hello Meizu!"
   echo -n "substr:"
   #起始下标:截取个数
   echo ${substr:0:5}
   echo ${substr:6:5}}

if-else语句格式

sh_if_else() {    local min=10
   local max=10

# -gt -lt -le -ge

#if [ ${min} -lt ${max} ]; then
   if ((${min} < ${max})); then
       echo "min < max"

#elif [ ${min} -gt ${max} ]; then
   elif ((${min} > ${max})); then
       echo "min > max"

else
       echo "min = max"
   fi}

for语句格式

sh_for_ctrl_fmt() {    echo "sh_for_ctrl_format:"
   #for((i=0; i<10; i++)); do
   for i in `seq 10`; do
       echo $i
   done}

while语句格式

sh_while_fmt() {
   local var=10
   while ((${var} > 0)); do
       var=$((var-1))        echo $var
   done
}

执行shell命令,并将结果赋给变量

sh_set_val_according2exec_res() {    var=$(date)    echo $var}

echo -e 开启转义字符

sh_echo_e() {
   echo "echo -e:"
   echo -e "OK \\\\\\\\t END"         #horizonal tab
   echo -e "OK \\\\\\\\n END"         # 换行
   echo -e "OK ccc \\\\\\\\c ccc END" # 不再产生输出
   echo -e "OK \\\\\\\\b END"         #执行退格键
   echo -e "OK \\\\\\\\v END \\\\\\\\v eee"  #vertical tab}

执行命令,抛弃所有输出

sh_exec_throw_output() {
   ls >/dev/null 2>&1}

$*各种符号意义

sh_dollar_means() {
   echo "查看shell本身进程ID \\\\\\\\$\\\\\\\\$: $$"
   echo "最后运行的后台PID \\\\\\\\$!: $!"
   echo "最后运行命令的结束码 \\\\\\\\$?: $?"
   echo "所有参数列表1 \\\\\\\\$*: $*"
   echo "所有参数列表2 \\\\\\\\[email protected]: [email protected]"
   echo "参数个数 \\\\\\\\$\\\\\\\\#: $#"
   echo "当前脚本文件名 \\\\\\\\$0: $0"}

四则运算

sh_operator() {    echo "sh_operator:"
   local num1=10
   local num2=10

#res=`expr 2 \\\\\\\\* ${num1}`
   #echo ${res}

local result_add=$((${num1} + ${num2}))    echo "add: "$result_add

local result_minus=$((${num1} - ${num2}))    echo "minus: "$result_minus

local result_multi=$((${num1} * ${num2}))    echo "multi: "$result_multi

local result_divide=$((${num1} / ${num2}))    echo "divide: "$result_divide

local result_mod=$((${num1} % ${num2}))    echo "mod: "$result_mod

#######################################

let result_add++    echo "result_add++: "${result_add}

let ++result_add    echo "++result_add: "${result_add}

let result_add+=5
   echo "result_add+=5: "${result_add}

let result_add--    echo "result_add--: "${result_add}

let --result_add    echo "--result_add: "${result_add}

let result_add-=5
   echo "result_add-=5: "${result_add}}

sh_random

sh_random() {    local random_num=`awk ‘BEGIN{srand();print int(rand()*1000)}‘`    echo "random num:  ${random_num}"}

EOF INPUT

sh_EOF_INPUT() {
   ncat $ip 6600 << EOF
seekid $position $random_numEOF
}

strcmp && ||

# -a  ==> 逻辑与# -o  ==> 逻辑或#    !  ==> 逻辑非sh_strcmp() {    echo "sh_strcmp:"
   local str1=‘y‘
   local str2=‘z‘
   #if (( "x${str1}" == "xy" && "x${str2}" == "xz" ));then
   #if [ "x${str1}" == "xy" -a "x${str2}" == "xz" ];then
   if [[ "x${str1}" == "xy" && "x${str2}" == "xz" ]];then
       echo "sh_strcmp: && success"
   else
       echo "sh_strcmp: && failed"
   fi

local flag=0
   #if [ ! ${flag} == 0 ]; then
   if (( ! ${flag} == 0 )); then
       echo "! success"
   else
       echo "! failed"
   fi

#if (( -d "/etc/zsh" && -e /etc/zsh/newuser.zshrc.recommended )); then
   if [ -d "/etc/zsh" -a -e /etc/zsh/newuser.zshrc.recommended ]; then
       echo "exist"
   else
       echo "not exist"
   fi}

sh_switch_case

sh_switch_case() {    echo "sh_switch_case:"

case "$1" in
       start)          echo "case $1";;
       stop)           echo "case $1";;
       install)        echo "case $1";;
       remove)         echo "case $1";;
       upgrade)        echo "case $1";;    esac}

输出pwd

sh_print_pwd() {    echo "sh_print_pwd:"
   dirname=$(cd "$(dirname "$0")";pwd)    echo "dirname: "${dirname}}

awk抓取html

sh_awk_spider_html() {
   echo "sh_awk_spider_html:"
   awk -F‘<div class="content"|/ul>‘ ‘{for(i=1;i<=NF;i++){if($i~/class="play-img"/){print $i}}}‘ \\\\\\\\        ${bt_spider_web_path}plug_xunbo.html|grep -a "h2"|grep -a "${bt_detail_url}" |tail -1 > ${bt_spider_log}xunbo_${kind}_classify.log

awk -F‘<a|/>‘ ‘{for(i=1;i<=NF;i++){if($i~/alt/){print $i}}}‘ ${bt_spider_log}xunbo_${kind}_classify.log  > ${bt_spider_log}classify_${kind}_info.log

awk -F‘[""]‘ ‘{print $4}‘  ${bt_spider_log}classify_${kind}_info.log > ${bt_spider_log}bt_${kind}_detail_link.log
   awk -F‘[""]‘ ‘{print $6}‘  ${bt_spider_log}classify_${kind}_info.log > ${bt_spider_log}bt_${kind}_name.log
   awk -F‘[""]‘ ‘{print $10}‘ ${bt_spider_log}classify_${kind}_info.log > ${bt_spider_log}bt_${kind}_pic.log }

sed基本使用

#查询hello关键字,打印相应行 sed -n ‘/hello/p‘ cron.txt

#删除含hello的行,输出到屏幕(原文件没删除)sed  ‘/hello/d‘ cron.txt  #跟上一句的区别:直接修改原文件sed -i ‘/hello/d‘ cron.txt  #移除空白行:sed -i ‘/^$/d‘ file#在包含hello关键字的指定行前加#号,注释该行:sed -i ‘/hello/s/^/#/g‘ /etc/crontabs/root

#取消#号,取消注释:sed -i ‘/hello/s/^#//‘ /etc/crontabs/root

如果想了解更多awk和sed这两条命令,请参考陈皓大神写的相关文章~

  • sed
  • awk

    更多精品教程关注微信公众号 运维小子 

时间: 2024-11-05 00:42:04

Bash shell 基础的相关文章

bash shell基础特性之三(数组)

bash shell基础特性之三(数组) 一.数组定义 数组指连续的多个独立内存空间,每个内存空间相当于一个变量. bash shell只支持一维数组,但参数个数没有限制. 数组元素:数组名+索引(从0开始编号) 声明数组:declare -a ARRAR_NAME(其实不用声明,按数组方式直接赋值给变量即可,BASH就知道那是数组) 关联数组:declare -A ARRAY_NAME 数组元素的赋值:一次赋值全部元素.指定索引进行赋值.一次只赋值一个元素 (1) array=(var1 va

bash shell基础编程

一. BASH Shell编程基础 1. BASH Shell的可执行文件 (1) 内部命令 (2) 外部命令 (3) 脚本文件 2. BASH Shell的命令解释过程 在path指定范围内查找(外部命令) ...... 3. BASH Shell的变量 (1) 变量的分类 -按作用域分 a. 局部变量 b. 全局变量 -按用途分 a. 自定义变量 b. 系统环境变量(path) c. 特殊变量 (2) 定义和引用变量 -定义变量: 即用即定义.不用加$ 注: 可用export命令将变量输出为

bash shell基础语法

本文主要是基础的基础,希望对大家有所帮助 一.Shell基本类型的变量: (1)Shell定义的环境变量: Shell在开始执行时就已经定义了一些和系统的工作环境有关的变量,用户还可以重新定义这些变量,常用的Shell环境变量有: HOME 用于保存注册目录的完全路径名. PATH 用于保存用冒号分隔的目录路径名,Shell将按PATH变量中给出的顺序搜索这些目录,找到的第一个与命令名称一致的可执行文件将被执行. TERM 终端的类型. UID 当前用户的识别字,取值是由数位构成的字串. PWD

Bash shell 基础特性 理论+案例详解

1.命令历史:history 环境变量: HISTFILE:命令历史记录的条数 HISTSIZE:~/.bash.history HISTFILESIZE:命令历史文件记录历史的条数 history:默认显示10条历史纪录 history -n:显示后n条历史记录 history -d n:删除第n条历史纪录 history -c:删除所有历史记录 history -a:手动追加当前会话缓冲区中的历史命令至历史文件中 !n:重复执行第n条命令 !!:重复执行上一条命令 !加命令的开头几个字母:重

Bash shell 基础命令

1.       Shell启动 Gun bash shell为用户提供交互式访问,登录时系统依赖于用户账户的配置,在/etc/passwd 文件中存放所有系统用户账户列表及基本配置,以下为条目样本: root:x:0:0:root:/root:/bin/bash 每个条目共有七个字段,分别以冒号隔开,代表的含义依次为"用户名:密码:UID(用户ID号):GID(用户主组ID号):GECOS(用户详细描述信息):用户家目录:用户默认shell程序".当用户登录以后将会启动默认shell

Linux操作系统基础解析之(七)——Bash(Shell)基础知识(1)

在日常交际英语中,Shell可以翻译成壳,大多指能够对内部核心起到保护作用的一种装置或结构.在计算机科学中,shell其实是指:为操作者提供的.能够通过系统调用或库调用使用整个计算机资源的访问接口. 它既是一种命令解析器又是一种程序设计语言.作为命令解析器,它可以解释和执行用户输入的命令,也可以自动地解释和执行预先编写好并保存在某个文本文件中的一系列的命令:作为程序设计语言,shell特别定义了各种变量和参数,并提供了许多在高级语言中才具有的控制结构,包括循环和条件分支,让我们可以像使用高级语言

Linux操作系统基础解析之(七)——Bash(Shell)基础知识(3)

五.注释 在非交互shell中或交互式shell中,内置命令shopt的选项interactive_comments被开启.以"#"开始的词使得这个词所在这一行上所有其他的剩余字符都被忽略(或称注释).交互式shell不用开启interactive_comments选项也不支持注释.interactive_comments选项在交互式shell中是默认启用的.注释是编写程序时,写程序的人给一个语句.程序段.函数等的解释或提示,能提高程序代码的可读性,以便于以后的参考.修改.后来,在应用

Linux操作系统基础解析之(七)——Bash(Shell)基础知识(5)

十一.函数  shell函数就是按照上面SHELL GRAMMAR的描述定义的保存着一系列等待稍后执行的命令.当shell函数名被当做一个简单命令名使用时,被这个函数名关联的一系列命令都被执行.函数在当前shell的上下文环境中被执行:不会创建新的进程来解释它们(这与shell脚本的执行形成了对比).当执行函数时,函数的参数成为执行过程中的位置参数.特殊参数#被更新以反映这个变化.特殊参数0不会改变.函数执行时,FUNCNAME变量的第一个元素被设置为函数的名称.  shell执行环境的所有其他

Linux操作系统基础解析之(七)——Bash(Shell)基础知识(2)

三.命令历史bash从Korn Shell和C Shell中吸收了很多的精华,其中之一正式为已经执行过的命令保存一个缓存副本的特性,我们称之为"命令历史"功能.我们为什么要使用命令历史功能呢?每个用户登录成功之后,尤其是使用bash这样的文件接口登录之后,所有的操作都是由执行命令来实现的,那么就不可避免的会出现重复执行某个命令的情况,如果每个命令都依靠键入的方式来输入的话,固然没有问题,但是效率不高而且也是浪费时间的"可耻"行为,命令历史刚好给我们提供了解决这种问题

bash shell基础之一

bash 变量类型: 环境变量 本地变量(局部变量) 位置变量 特殊变量 本地变量:只在当前进程(shell)中有效. bash:直接使用,不必声明:Name = jerry; 变量替换:如何引用变量 :${变量}.花括号大部分时间可以省略,如上例,想要使用变量中的        值,echo$Name. 例外情况:双引号(若引用):例如 Name = pig,想要输出there are some pigs就需要这样写: echo "there are some ${pig}s" 单引