shell学习笔记

shell是运维人员的最基本一门编程语言。

shell的基本涵括:变量(局部变量 全局变量 环境变量) 函数(function) if函数 for循环 while循环 运算  awk  sed 

 

变量:

变量的命名

aa=hello                           这里的命名,如果没有特殊符号(下划线,括号,键盘上的F键的符号等),都可以不加任何符号直接写在等号后面的

aa='hello'                         加了单引号,原意是原样输出,在这里做变量,没有特殊符号,这样做没什么毛病。

aa="hello"                        双引号,在shell中,如果要显示变量的,就必须使用双引号。

aa=$(ls -l /root;cat /etc/passwd)           在使用变量中,有时候我们需要用到的变量是执行一个命令或者几个命令,这个时候就需要用到 $() 或者等价于 反引号 `` ,在这个过程中,如果有多个命名就要用 ;  比如 aa=$(less /etc/group;df -h;top;nload)

 函数(function)

function look(){

             cat /etc/passwd

}

#########调用函数######

look

#####  调用函数结束#############

 

变量值的传递--------------------一个变量的结果赋值给另外一个变量

begin_time=`date`

finish_time=$(date)       

在这里date使用两遍,我们要的结果就是显示开始时间和结束时间。

 

统计字符串的长度

string ${#string}    比如 echo ${$yanzi}

 

shell字符串拼接

  1. #!/bin/bash
  2. name="Shell"
  3. url="http://c.biancheng.net/shell/"
  4. str1=$name$url #中间不能有空格
  5. str2="$name $url" #如果被双引号包围,那么中间可以有空格
  6. str3=$name": "$url #中间可以出现别的字符串
  7. str4="$name: $url" #这样写也可以
  8. str5="${name}Script: ${url}index.html" #这个时候需要给变量名加上大括号
  9. echo $str1
  10. echo $str2
  11. echo $str3
  12. echo $str4
  13. echo $str5

运行结果:
Shellhttp://c.biancheng.net/shell/
Shell http://c.biancheng.net/shell/
Shell: http://c.biancheng.net/shell/
Shell: http://c.biancheng.net/shell/
ShellScript: http://c.biancheng.net/shell/index.html

 

 

字符串截取

1. 从左边截取   

${string: start :length}     

         比如:

  1. url="c.biancheng.net"
  2. echo ${url: 2: 9}

2.从右边截取

${string: 0-start :length}

比如:

  1. url="c.biancheng.net"
  2. echo ${url: 0-13: 9}

使用#截取右边的字符

${string#*chars}

比如:

  1. url="http://c.biancheng.net/index.html"
  2. echo ${url#*:}

        结果为//c.biancheng.net/index.html

 

 

格式说明
${string: start :length} 从 string 字符串的左边第 start 个字符开始,向右截取 length 个字符。
${string: start} 从 string 字符串的左边第 start 个字符开始截取,直到最后。
${string: 0-start :length} 从 string 字符串的右边第 start 个字符开始,向右截取 length 个字符。
${string: 0-start} 从 string 字符串的右边第 start 个字符开始截取,直到最后。
${string#*chars} 从 string 字符串第一次出现 *chars 的位置开始,截取 *chars 右边的所有字符。
${string##*chars} 从 string 字符串最后一次出现 *chars 的位置开始,截取 *chars 右边的所有字符。
${string%*chars} 从 string 字符串第一次出现 *chars 的位置开始,截取 *chars 左边的所有字符。
${string%%*chars} 从 string 字符串最后一次出现 *chars 的位置开始,截取 *chars 左边的所有字符。

shell计算

expr   格式 :  expr 6 + 9 

 

bc 是shell一个内置计算器

直接输入 bc

variable=$("9+6"|bc)

 shell判断

if else

格式:

if  condition;  then
    statement(s)
fi

例如:

#!/bin/bash
read a
read b
if (( $a == $b ))
then
echo "a和b相等"
fi

说明:   (())是一种数学计算命令,它除了可以进行最基本的加减乘除运算,还可以进行大于、小于、等于等关系运算,以及与、或、非逻辑运算。当 a 和 b 相等时,(( $a == $b ))判断条件成立,进入 if,执行 then 后边的 echo 语句

if  elif else   这种if判断主要用于有多个分支的情况下,使用这种格式。

 if  condition1
then
   statement1
elif condition2
then
    statement2
elif condition3
then
    statement3
……
else
   statementn
fi

 

例如:

#!/bin/bash
read age
if (( $age <= 2 )); then
echo "婴儿"
elif (( $age >= 3 && $age <= 8 )); then
echo "幼儿"
elif (( $age >= 9 && $age <= 17 )); then
echo "少年"
elif (( $age >= 18 && $age <=25 )); then
echo "成年"
elif (( $age >= 26 && $age <= 40 )); then
echo "青年"
elif (( $age >= 41 && $age <= 60 )); then
echo "中年"
else
echo "老年"
fi

 

Shell [[]]详解:检测某个条件是否成立

test 能做到的,[[ ]] 也能做到,而且 [[ ]] 做的更好;test 做不到的,[[ ]] 还能做到。可以认为 [[ ]] 是 test 的升级版,对细节进行了优化,并且扩展了一些功能。

 

例如:

#!/bin/bash
read str1
read str2
if [[ -z $str1 ]] || [[ -z $str2 ]] #不需要对变量名加双引号
then
echo "字符串不能为空"
elif [[ $str1 < $str2 ]] #不需要也不能对 < 进行转义
then
echo "str1 < str2"
else
echo "str1 >= str2"
fi

 

case  in 语句

 

#!/bin/bash
printf "Input integer number: "
read num
case $num in
1)
echo "Monday"
;;
2)
echo "Tuesday"
;;
3)
echo "Wednesday"
;;
4)
echo "Thursday"
;;
5)
echo "Friday"
;;
6)
echo "Saturday"
;;
7)
echo "Sunday"
;;
*)
echo "error"
esac

 

 

Shell while 循环的用法如下:
while condition
do
statements
done

 

例子:

#!/bin/bash
i=1
sum=0
while ((i <= 100))
do
((sum += i))
((i++))
done
echo "The sum is: $sum"

 

unti 循环和 while 循环恰好相反,当判断条件不成立时才进行循环,一旦判断条件成立,就终止循环。

 until condition
do
    statements
done

 

例如:

#!/bin/bash
i=1
sum=0
until ((i > 100))
do
((sum += i))
((i++))
done
echo "The sum is: $sum"

 

for循环

for((exp1; exp2; exp3))
do
    statements
done

 

例子:

#!/bin/bash
sum=0
for ((i=1; i<=100; i++))
do
((sum += i))
done
echo "The sum is: $sum"

 

select in 循环用来增强交互性,它可以显示出带编号的菜单,用户输入不同的编号就可以选择不同的菜单,并执行不同的功能。

Shell select in 循环的用法如下:
select variable in value_list
do
statements
done

 

例如:

#!/bin/bash
echo "What is your favourite OS?"
select name in "Linux" "Windows" "Mac OS" "UNIX" "Android"
do
echo $name
done
echo "You have selected $name"

posted @ 2021-09-17 16:37  woaibaobei  阅读(38)  评论(0编辑  收藏  举报