shell基础

shell脚本

1.shell脚本执行方式

1.1 添加执行权

chmod u+x demo.h # 给demo.shell增加可执行权
./demo.shell # 直接运行

1.2 指定shell命令

bash demo.shell # 使用bash解释执行

2.shell变量

2.1 位置变量

预定义变量 含义
$0 shell脚本名
$1 ... 传递给脚本的参数,$1代表第一个参数

2.2 预定义变量

预定义变量 含义
$# 传递到脚本中参数数量
$* 传递到脚本的所有参数内容
$? 命令执行后返回的状态,0表示成功,其他值则表明其他执行错误
$$ 当前进程的进程号
$! 后台运行的最后一个进程号

2.3 命令替换

#将command运行结果赋值给var
#语法一
var = $(command)
#语法二
var = `command`

#例题一
echo "today is"`date`
today isSat Nov 14 12:36:07 CST 2020

#例题二
echo "User is `whoami`"
User is root

3.输入输出

3.1 read命令

read [选项] 命令列表
预定义变量 含义
-p 提示信息 设置提示信息
-n 数字 当read读多少个字符后返回
-s 键盘输入屏幕不显示,用于密码输入
-t 超时时间 设置超时时间
-r 取消转译字符的转义作用
-d delim 定义新的换行符

3.2 echo命令

echo [选项] 字符串

4.shell中的引号

1.反引号

#命令替换
var1=`ls -l`
echo `pwd`

2.单引号

#实例一:
echo *
tdyq xtdyq
#实例二:
echo '*'
*
#实例三:
text='* mean all files'

echo $text
tdyq xtdyq mean all files

echo '$text'
$text
#单引号中有只有特殊含义的字符的时候不会进行转义,特殊字符加字符串的形式会进行转义

3.双引号

#在双引号中除了$ 反引号`和反斜杠\ 其余都保留原来的含义
#实例一: $text 内容被替换
text='whoami'
echo "* $text end"
* whoami end

echo "`$text`"  #先替换再转译
root

echo "\$text" #\ 转译字符
$text

#实例二:加双引号和不加双引号的区别
echo "*"
*
echo *
tdyq xtdyq

5.条件表达式

#语法一:
test 条件表达式
#语法二:
[条件表达式]

5.1文件状态操作符

-d # 目录
-f # 文件
-r # 可读
-s # 文件长度大于0 返回真
-u # SUID被设置,返回真
-w # 可写,返回真
-x # 可执行,返回真

5.2字符串操作符

string # string非空,返回真
-n string # string的长度大于0,返回真
-z string # string长度为0,返回真
string1 = string2 # 相等返回真
string1!=string2 # 不等放回真

5.3数字操作符

5.4逻辑操作符

-a #且
-o #或
! #非

5.6命令操作符

cmd & #命令后台运行

6.判断语句

6.1条件语句

#语法一:
if [ 条件表达式 ]
    then 
        命令
    else
        命令
fi

#语法二:
if [ 条件表达式 ];then
    命令
fi

#语法三:
if test 条件表达式1
    then
        命令
    elif[ 条件表达式2 ]
    then
        命令
    else
        命令
fi

练习1:判断当前目录下是否存在某文件

#!/bin/bash
echo "Enter a file name"
read file
if test -f $file
then 
    echo "File $file exists"
fi

练习2:在文本中查找字符串

 #!/bin/bash
 if grep "GNU" myfile>/dev/null
 then
   echo "\"GNU\"occurs in myfile"
 else
 echo
 echo "\"GNU\"does not occur in myfile"
 fi

6.2分支语句

case 变量 in
    值1)
        命令
        ;;
    值2)
        命令
        ;;
esac

练习1:使用分支语句判断上下午

  #!/bin/bash
   hour='date+%H'
   case $hour in
   0[1-9]1[01])
           echo "早上"
           ;;
   1[2-7])
         echo "下午"
          ;;
 *)
          echo "晚上"
          ;;
  esac

6.3循环语句

6.3.1 for循环

for 变量名 in 参数列表
do
    命令
done

6.3.2算术表达式

expr 1 + 2

6.3.3 while循环

while [ 条件表达式 ]
do
    命令
done

6.3.4 until 语句

until [ 条件表达式 ]
    do
        命令
    done

6.3.5 函数

函数名(){
    命令
    return
}

补充:向shell脚本中传递参数

vim test4.sh
#!/bin/bash
file=$1
if test -f $file
then 
    echo "File $file exists"
fi
./test4.sh test1.sh 
File test1.sh exists
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 磁盘位置 vim test.sh $0 表示文件所在位置信息 ./test.sh%表示删除从后匹配的最小字符串,...
    宇宙小神特别萌阅读 453评论 0 2
  • 概述 首先,咱们来了解一下,什么是Shell。操作系统内核给我们提供了各种接口,同时也提供了各种用户层的库,理论上...
    keysaim阅读 1,429评论 0 0
  • shell脚本基础 shell脚本可以输入多个命令并处理每个命令的结果。 创建shell脚本时,需要在文件的第一行...
    伊落阅读 447评论 0 0
  • Shell 编程中三种引号的作用 单引号 ‘ ’:其中内容是字符串,没有shell的特殊含义; 双引号“ ”:其中...
    倔强swj阅读 352评论 0 0
  • shell概述 定义:shell是一个命令行解释器,它为用户提供了一个向linux内核发送请求以便运行程序的界面系...
    绪_c150阅读 279评论 0 1