【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
本文来自博客园,作者:爱笑的眼睛真美,转载请注明原文链接:https://www.cnblogs.com/zhangxue521/p/13391727.html