Loading

【shell】【二】基本命令

1、新建test.sh文件

vim test.sh
进入vim界面,i进入编辑模式,输入下面的代码,然后esc,进入底部命令模式,然后:wq!强制保存并退出。
1 #!/bin/bash
2 echo "hello word"
或者直接用sublime等新建后缀是.sh的文件。

2、给.sh文件添加可执行权限

1 chmod +x ./test.sh  #使脚本具有执行权限
2 chmod 777 ./test.sh #777可读可写可执行

 

 
 

3、运行该文件

1 ./test.sh #执行脚本

 

 

4、shell变量

4.1.定义变量时,变量名不加美元符号

1 your_name="runoob.com"
2 
3 有效的变量名称:
4 RUNOOB
5 LD_LIBRARY_PATH
6 _var
7 var2
定义变量规则:
  • 变量名和等号之间不能有空格
  • 命名只能使用英文字母,数字和下划线,首个字符不能以数字开头。
  • 中间不能有空格,可以使用下划线(_)。
  • 不能使用标点符号。
  • 不能使用bash里的关键字(可用help命令查看保留关键字)。

4.2.使用变量

以下两种输出方式都ok,但是尽量用第二种
your_name="runoob.com"
echo $you_name
echo ${you_name}
echo I am good at ${you_name}Script .     会输出完整的句子
echo I am good at $you_name Script 。     会将you_name理解为新的变量,值为空

 

4.3.只读变量

1 #!/bin/bash
2 myUrl="http://www.google.com"
3 readonly myUrl
4 
5 
6 运行脚本会报错
7 /bin/sh: NAME: This variable is read only.

 

4.4.删除变量

#!/bin/sh
myUrl="http://www.runoob.com"
unset myUrl
echo $myUrl

注意:unset不能删除只读变量

 

 

4.5.变量类型

  • 1) 局部变量 局部变量在脚本或命令中定义,仅在当前shell实例中有效,其他shell启动的程序不能访问局部变量。
  • 2) 环境变量 所有的程序,包括shell启动的程序,都能访问环境变量,有些程序需要环境变量来保证其正常运行。必要的时候shell脚本也可以定义环境变量。
  • 3) shell变量 shell变量是由shell程序设置的特殊变量。shell变量中有一部分是环境变量,有一部分是局部变量,这些变量保证了shell的正常运行

4.6.字符串操作

 1 获取字符串长度#
 2 string="abcd"
 3 echo ${#string} #输出 4
 4 
 5 截取字符串
 6 string="runoob is a great site"
 7 echo ${string:1:4} # 输出 unoo
 8 
 9 查找子字符串
10 string="runoob is a great site"
11 echo `expr index "$string" io`  # 输出 4
12 注意: 以上脚本中 ` 是反引号,而不是单引号 ',不要看错了哦。

5、数组

 
数组中可以存放多个值。Bash Shell 只支持一维数组(不支持多维数组),初始化时不需要定义数组大小(与 PHP 类似)
Shell 数组用括号来表示,元素用"空格"符号分割开
 1 定义数组,在 Shell 中,用括号来表示数组,数组元素用"空格"符号分割开。定义数组的一般形式为:
 2 数组名=(值1 值2 ... 值n)
 3 array_name=(value0 value1 value2 value3)
 4 或者
 5 array_name=(
 6 value0
 7 value1
 8 value2
 9 value3
10 )
11 或者
12 array_name[0]=value0
13 array_name[1]=value1
14 array_name[n]=valuen
15 
16 读取数组
17 valuen=${array_name[n]}
18 
19 使用 @ 符号可以获取数组中的所有元素,例如:
20 echo ${array_name[@]}
21 
22 
23 # 取得数组元素的个数
24 length=${#array_name[@]}
25 # 或者
26 length=${#array_name[*]}
27 # 取得数组单个元素的长度
28 lengthn=${#array_name[n]}
29 
30 
31 例子
32 arr=(9 2 'Aaa' 'B')
33 echo ${arr[@]}
34 echo ${arr[*]}
35 len=${#arr[*]}
36 echo $len
37 echo "数组元素个数为: ${#arr[@]}"
38 
39 
40 输出=========
41 ./test2.sh 
42 9 2 Aaa B
43 9 2 Aaa B
44 4
45 数组元素个数为: 4

6、注释

 1 单行注释
 2 #--------------------------------------------
 3 # 这是一个注释
 4 # author:菜鸟教程
 5 多行注释
 6 :<<EOF
 7 注释内容...
 8 注释内容...
 9 注释内容...
10 EOF
11 或者
12 :<<'
13 注释内容...
14 注释内容...
15 注释内容...
16 '
17 
18 :<<!
19 注释内容...
20 注释内容...
21 注释内容...
22 !

7、Shell 传递参数

 1 1、传递参数
 2 echo "hi,no: $0"
 3 echo "hi,no: $1"
 4 echo "hi,no: $2"
 5 
 6 运行
 7 ./test1.sh 'one' 'two' 'three'
 8 
 9 Hello World !
10 hi,no: ./test1.sh    -- 会把运行的那个文件名默认是第0个字段
11 hi,no: one
12 hi,no: two
13 
14 
15 2、$*与$@的区别
16 都是引用所有的参数,但是$*是把出入的参数当成一个字符串去展示,$@当成一个个的字符
17 echo "-- \$* 演示 ---"
18 for i in "$*"; do
19     echo $i
20 done
21 
22 echo "-- \$@ 演示 ---"
23 for i in "$@"; do
24     echo $i
25 done
26 
27 运行
28 ./test1.sh 'one' 'two' 'three'
29 -- $* 演示 ---
30 one two three
31 -- $@ 演示 ---
32 one
33 two
34 three

8、Shell 基本运算符

  • 算数运算符
  • 关系运算符
  • 布尔运算符
  • 字符串运算符
  • 文件测试运算符
# 运算符,expr 是一款表达式计算工具,使用它能完成表达式的求值操作。
val=`expr 1 + 1`
echo $val
注意:表达式和运算符之间要有空格,1+1正确
 

8.1、算数运算符

 

 1 #!/bin/bash
 2 
 3 # 运算符,expr 是一款表达式计算工具,使用它能完成表达式的求值操作。1 + 1之间必须有空格
 4 val=`expr 1 + 1`
 5 echo $val
 6 
 7 a=10
 8 b=20
 9 if [ a = b ]
10 then
11     echo "a等于b"
12 else
13     echo "a不等于b"
14 fi
15 
16 a=10
17 b=20
18 
19 val=`expr $a + $b`
20 echo "a + b : $val"
21 
22 val=`expr $a - $b`
23 echo "a - b : $val"
24 
25 val=`expr $a \* $b`
26 echo "a * b : $val"
27 
28 val=`expr $b / $a`
29 echo "b / a : $val"
30 
31 val=`expr $b % $a`
32 echo "b % a : $val"
33 
34 if [ $a == $b ]
35 then
36    echo "a 等于 b"
37 fi
38 if [ $a != $b ]
39 then
40    echo "a 不等于 b"
41 fi

8.2、关系运算符

 

 

 1 -eq =====equal等于
 2 -ne =====not equal 不等于
 3 -gt =====greater than a>b
 4 -lt =====less than a<b
 5 -ge =====greater than or equal a>=b
 6 -le =====less than or equal a>=b
 7 
 8 
 9 
10 a=10
11 b=20
12 
13 if [ $a -eq $b ]
14 then
15    echo "$a -eq $b : a 等于 b"
16 else
17    echo "$a -eq $b: a 不等于 b"
18 fi
19 if [ $a -ne $b ]
20 then
21    echo "$a -ne $b: a 不等于 b"
22 else
23    echo "$a -ne $b : a 等于 b"
24 fi
25 if [ $a -gt $b ]
26 then
27    echo "$a -gt $b: a 大于 b"
28 else
29    echo "$a -gt $b: a 不大于 b"
30 fi
31 if [ $a -lt $b ]
32 then
33    echo "$a -lt $b: a 小于 b"
34 else
35    echo "$a -lt $b: a 不小于 b"
36 fi
37 if [ $a -ge $b ]
38 then
39    echo "$a -ge $b: a 大于或等于 b"
40 else
41    echo "$a -ge $b: a 小于 b"
42 fi
43 if [ $a -le $b ]
44 then
45    echo "$a -le $b: a 小于或等于 b"
46 else
47    echo "$a -le $b: a 大于 b"
48 fi

8.3、布尔运算符

 

 1 a=10
 2 b=20 
 3 if [ $a != $b ];then
 4     echo "$a != $b : a不等于b"
 5 else
 6     echo "$a == $b : a等于b"
 7 fi
 8 if [ $a -lt 100 -a $b -gt 15 ]
 9 then
10    echo "$a 小于 100 且 $b 大于 15 : 返回 true"
11 else
12    echo "$a 小于 100 且 $b 大于 15 : 返回 false"
13 fi
14 if [ $a -lt 100 -o $b -gt 100 ]
15 then
16    echo "$a 小于 100 或 $b 大于 100 : 返回 true"
17 else
18    echo "$a 小于 100 或 $b 大于 100 : 返回 false"
19 fi
20 if [ $a -lt 5 -o $b -gt 100 ]
21 then
22    echo "$a 小于 5 或 $b 大于 100 : 返回 true"
23 else
24    echo "$a 小于 5 或 $b 大于 100 : 返回 false"
25 fi

8.4、逻辑运算符

 

 

 1 a=10
 2 b=20
 3 
 4 if [[ $a -lt 100 && $b -gt 100 ]];then
 5    echo "返回 true"
 6 else
 7    echo "返回 false"
 8 fi
 9 
10 if [[ $a -lt 100 || $b -gt 100 ]];then
11    echo "返回 true"
12 else
13    echo "返回 false"
14 fi

8.5、字符串运算符

 1 a="abc"
 2 b="efg"
 3 
 4 if [ $a = $b ]
 5 then
 6    echo "$a = $b : a 等于 b"
 7 else
 8    echo "$a = $b: a 不等于 b"
 9 fi
10 if [ $a != $b ]
11 then
12    echo "$a != $b : a 不等于 b"
13 else
14    echo "$a != $b: a 等于 b"
15 fi
16 if [ -z $a ]
17 then
18    echo "-z $a : 字符串长度为 0"
19 else
20    echo "-z $a : 字符串长度不为 0"
21 fi
22 if [ -n "$a" ]
23 then
24    echo "-n $a : 字符串长度不为 0"
25 else
26    echo "-n $a : 字符串长度为 0"
27 fi
28 if [ $a ]
29 then
30    echo "$a : 字符串不为空"
31 else
32    echo "$a : 字符串为空"
33 fi

8.6、文件测试运算符

 

 

9、echo 命令

9.1、输出普通字符串

echo "It is a test"
结果:It is a test

9.2、显示转义字符

echo "\"It is a test\""

结果:"It is a test"

9.3、显示变量

#!/bin/sh
read name 
echo "$name It is a test"
结果:
OK                     #标准输入
OK It is a test        #输出

9.4、显示换行

echo -e "OK! \n" # -e 开启转义
echo "It is a test"
结果:
OK!

It is a test

9.5、显示结果保存到文件

echo "It is a test" > myfile
 

9.6、显示命令字符对应的结果

echo `date`
注意: 这里使用的是反引号 `, 而不是单引号 '。
结果将显示当前日期
2020年 7月28日 星期二 15时05分27秒 CST

 

 

 

 

 

 

 

 

 

posted @ 2020-07-28 16:14  爱笑的眼睛真美  阅读(270)  评论(0编辑  收藏  举报