Shell常用命令
一、Shell变量
1、变量名命名规范
-
命名只能使用英文字母,数字和下划线,首个字符不能以数字开头。
-
中间不能有空格,可以使用下划线(_)。
-
不能使用标点符号。
-
不能使用bash里的关键字(可用help命令查看保留关键字)。
有效的命名: YouName You_Name_one _you you2 无效的命名: ?you=12 user*123=root
2、(1)使用变量
-
使用一个定义过的变量,只要在变量名前面加美元符号即可,如:
your_name="test" echo $your_name echo ${your_name} -
变量名外面的花括号是可选的,加不加都行,加花括号是为了帮助解释器识别变量的边界,比如下面这种情况:
echo "I am the best ${yname}Script" -
已定义的变量,可以被重新定义,如:
your_name="kang" echo $your_name your_name="mrli" echo $your_name -
(2)只读变量
-
使用 readonly 命令可以将变量定义为只读变量,只读变量的值不能被改变。
例如:your_name="test" readonly your_name your_name="you are good" 输出结果为: test.sh: line 5: your_name: readonly variable -
(3)删除变量
-
使用 unset 命令可以删除变量。语法:
unset your_name -
变量被删除后不能再次使用。unset 命令不能删除只读变量。
your_name="good" unset your_name echo $your_name 以上实例执行将没有任何输出。 -
(4) 定义全局变量 export
[root@www ~]# export your_name='zhangsan' #上述设置的变量其实都是一次性变量,系统重启就会丢失。 #如果希望本地变量或者全局变量可以永久使用,可以将需要设置的变量写入变量文件中即可。 -
(5)变量类型
1、局部变量
局部变量在脚本或命令中定义,仅在当前shell实例中有效,其他shell启动的程序不能访问局部变量。
2、环境变量
所有的程序,包括shell启动的程序,都能访问环境变量,有些程序需要环境变量来保证其正常运行。必要的时候shell脚本也可以定义环境变量。
3、shell变量
shell变量是由shell程序设置的特殊变量。shell变量中有一部分是环境变量,有一部分是局部变量,这些变量保证了shell的正常运行
二、Shell字符串
字符串是shell编程中最常用最有用的数据类型,字符串可以用单引号,也可以用双引号,也可以不用引号。(除了数字和字符串,也没啥其它类型好用了)
1、单引号
your_name='zhangsan'
单引号字符串的限制:
- 单引号里的任何字符都会原样输出,单引号字符串中的变量是无效的;
- 单引号字串中不能出现单独一个的单引号(对单引号使用转义符后也不行),但可成对出现,作为字符串拼接使用。
2、双引号
your_name='zhangsan'
str="Your are best "$your_name" ! "
echo $str
输出结果为:
Your are best zhangsan !
双引号的优点:
- 双引号里可以有变量
- 双引号里可以出现转义字符
3、拼接字符串
your_name="zhangsan"
# 使用双引号拼接
str="hello, "$your_name" !"
str_1="hello, ${your_name} !"
echo $str $str_1
# 使用单引号拼接
str_2='hello, '$your_name' !'
str_3='hello, ${your_name} !'
echo $str_2 $str_3
#输出结果为:
hello, zhangsan! hello, zhangsan!
hello, zhangsan! hello, ${your_name} !
4、获取字符串长度
string="abcde"
echo ${#string} #输出 5
5、提取子字符串
#从字符串第 2 个字符开始截取 4 个字符:
string="Your are best!"
echo ${string:1:3} # 输出 our
注意:第一个字符的索引值为 0。
三、Shell 数组
- bash支持一维数组(不支持多维数组),并且没有限定数组的大小。
- 获取数组中的元素要利用下标,下标可以是整数或算术表达式,其值应大于或等于 0。
1、定义数组
数组元素用"空格"符号分割开。定义数组的一般形式为:
数组名=(值1 值2 ... 值n)
例 如:
array_test=(value0 value1 value2 value3)
2、读取数组
#读取数组元素值的一般格式是:
${数组名[下标]}
例 如:
valuen=${array_test[n]}
#使用 @ 符号可以获取数组中的所有元素
例 如:
echo ${array_name[@]}
3、获取数组的长度
#取得数组元素的个数
length=${#array_test[@]}
#或者
length=${#array_test[*]}
#取得数组单个元素的长度
lengthn=${#array_test[n]}
四、Shell 传递参数
- 在执行 Shell 脚本时,我们可以向脚本传递参数,脚本内获取参数的格式为:$n。n 代表一个数字,1 为执行脚本的第一个参数,2为执行脚本的第二个参数,以此类推……
例如:
#!/bin/bash
#author:test
echo "Shell 传递参数实例";
echo "执行的文件名:$0";
echo "第一个参数为:$1";
echo "第二个参数为:$2";
echo "第三个参数为:$3";
输出结果:
$ bash test.sh 1 2 3
Shell 传递参数实例!
执行的文件名:./test.sh
第一个参数为:1
第二个参数为:2
第三个参数为:3
#另外,还有几个特殊字符用来处理参数:

五、Shell 基本运算符
Shell 和其他编程语言一样,支持多种运算符,包括:
- 算数运算符
- 关系运算符
- 布尔运算符
- 字符串运算符
- 文件测试运算符
1、算术运算符
假定变量 a 为 10,变量 b 为 20

实例:
#!/bin/bash
a=10
b=20
val=`expr $a + $b`
echo " a + b = $val"
val=`expr $a - $b`
echo " a - b = $val"
val=`expr $a \* $b`
echo " a * b = $val"
val=`expr $b / $a`
echo " a / b = $val"
echo "a==b?"
if [ $a == $b ]
then
echo "true , a=b"
else
echo "false , a!=b"
fi
echo "a!=b?"
if [ $a != $b ]
then
echo "true , a!=b"
else
echo "false , a=b"
fi
#输出结果为
a + b = 30
a - b = -10
a * b = 200
a / b = 2
a==b?
false , a!=b
a!=b?
true , a!=b
2、关系运算符
假定变量 a 为 10,变量 b 为 20

实例:
#!/bin/bash
a=10
b=20
if [ $a -eq $b ]
then
echo "$a -eq $b a等于b "
else
echo "$a -eq $b a不等于b"
fi
if [ $a -ne $b ]
then
echo "$a -ne $b a不等于b"
else
echo "$a -ne $b a等于b"
fi
if [ $a -gt $b ]
then
echo "$a -gt $b a大于b"
else
echo "$a -gt $b a小于b"
fi
if [ $a -lt $b ]
then
echo "$a -lt $b a小于b"
else
echo "$a -lt $b a大于b"
fi
if [ $a -ge $b ]
then
echo "$a -ge $b a大于等于b"
else
echo "$a -ge $b a小于等于b"
fi
if [ $a -le $b ]
then
echo "$a -le $b a小于等于b"
else
echo "$a -le $b a大于等于b"
fi
#输出结果
10 -eq 20 a不等于b
10 -ne 20 a不等于b
10 -gt 20 a小于b
10 -lt 20 a小于b
10 -ge 20 a小于等于b
10 -le 20 a小于等于b
3、布尔运算符
假定变量 a 为 10,变量 b 为 20

实例:
#!/bin/bash
a=10
b=20
if [ $a != $b ]
then
echo " $a != $b , a 不等于 b , 返回true"
else
echo " $a != $b , a 等于 b"
fi
if [ $a -lt 20 -o $b -gt 100 ]
then
echo "$a < 20 -a $b > 100 ,返回 true"
else
echo "$a < 20 -a $b > 100 ,返回 false"
fi
if [ $a -lt 20 -a $b -gt 15 ]
then
echo "$a < 20 -o $b > 15 , 返回true"
else
echo "$a < 20 -o $b > 15 , 返回flase"
fi
输出结果:
10 != 20 , a 不等于 b , 返回true
10 < 20 -a 20 > 100 ,返回 true
10 < 20 -o 20 > 15 , 返回true
4、逻辑运算符
假定变量 a 为 10,变量 b 为 20

实例:
#!/bin/bash
a=10
b=20
if [[ $a -lt 20 && $b -gt 15 ]]
then
echo " $a < 20 且 $b > 15 , 返回true"
else
echo " $a < 20 且 $b > 15 ,返回flase"
fi
if [[ $a -lt 20 || $b -gt 100 ]]
then
echo " $a < 20 或 $b > 100 , 返回true"
else
echo " $a < 20 或 $b > 100 ,返回flase"
fi
#输出结果
10 < 20 且 20 > 15 , 返回true
10 < 20 或 20 > 100 , 返回true
5、字符串运算符
假定变量 a=“abc”,变量 b="xyz"

实例:
#!bin/bash
a="abc"
b="xyz"
if [ $a = $b ]
then
echo "$a = $b : a 等于 b"
else
echo "$a = $b: a 不等于 b"
fi
if [ $a != $b ]
then
echo "$a != $b : a 不等于 b"
else
echo "$a != $b: a 等于 b"
fi
if [ -z $a ]
then
echo "-z $a : 字符串长度为 0"
else
echo "-z $a : 字符串长度不为 0"
fi
if [ -n "$a" ]
then
echo "-n $a : 字符串长度不为 0"
else
echo "-n $a : 字符串长度为 0"
fi
if [ $a ]
then
echo "$a : 字符串不为空"
else
echo "$a : 字符串为空"
fi
输出结果:
abc = xyz: a 不等于 b
abc != xyz : a 不等于 b
-z abc : 字符串长度不为 0
-n abc : 字符串长度不为 0
abc : 字符串不为空
6、文件测试运算符
变量 file 表示文件 /temp/test.sh,大小为 100 字节,具有 rwx 权限

实例
#!/bin/bash
file="/temp/test.sh"
if [ -r $file ]
then
echo "文件可读"
else
echo "文件不可读"
fi
if [ -w $file ]
then
echo "文件可写"
else
echo "文件不可写"
fi
if [ -x $file ]
then
echo "文件可执行"
else
echo "文件不可执行"
fi
if [ -f $file ]
then
echo "文件为普通文件"
else
echo "文件为特殊文件"
fi
if [ -d $file ]
then
echo "文件是个目录"
else
echo "文件不是个目录"
fi
if [ -s $file ]
then
echo "文件不为空"
else
echo "文件为空"
fi
if [ -e $file ]
then
echo "文件存在"
else
echo "文件不存在"
fi
#输出结果:
文件可读
文件可写
文件可执行
文件为普通文件
文件不是个目录
文件不为空
文件存在
六、Shell echo命令
1.显示普通字符串:
echo "It is a test"
2. -e 若字符串中出现以下字符,则特别加以处理,而不会将它当成一般文字输出:
-
\c 在输出结尾不换行
#!/bin/sh echo -e "OK! \c" echo "It is a test" 输出结果: OK! It is a test -
\t 插入tab

-
\b 删除前一个字符

七、Shell read命令
- 默认接受键盘的输入,回车符代表输入结束
------read 命令选项------
- -p 打印信息 (后面跟提示信息,即在输入前打印提示信息)
- -t 限定时间 (后面跟秒数,定义输入字符的等待时间)
- -s 不回显 (安静模式,在输入字符时不再屏幕上显示,例如login时输入密码)
- -n 可以输入字符个数 (后跟一个数字,定义输入文本的长度,输入字符数达到后,会自动退出)
例:
#num是定义的变量
#/bin/bash
read -n1 -p "请输入需要安装的版本号:" num
输出结果为:
请输入需要安装的版本号:
八、Shell 流程控制
---------------------- if 判 断 语 句--------------------------
- 1、单if语句
if [ condition ] #condition 值为true or false
then
commands
fi
-----该语句翻译成汉语大意如下:
假如 条件为真
那么
执行commands代码块
结束
- 2、if-then-else语句
if [ condition ]
then
commands1
else
commands2
fi
-----该语句翻译成汉语大意如下:
假如条件为真
那么
执行commands1代码块
否则
执行commands2代码块
结束
- 3、 if-then-elif语句
if [ condition 1]
then
commands1
elif [ condition 2]
then
commands2
.......
else
commandsX
fi
-----该语句翻译成汉语大意如下:
假如 条件1 为真
那么
执行代码块1
假如 条件2 为真
那么
执行代码块2
以此类推的N个条件及对应的执行代码块
否则 【以上所有条件中没有一个满足的】
执行代码块X
结束
---------------------- for 循 环 语 句--------------------------
- for 语法一
for var in value1 value2 ......
do
commands
done
#实例

- for 语法二
for ((变量;条件;自增减运算))
do
代码块
done
#实例

sleep N 脚本执行到该步休眠N秒
#实例

continue 跳过循环中的某次循环
#实例

break 跳出循环继续执行后续代码
#实例

---------------------- while 循 环 语 句--------------------------
while循环和for其实是一样的,一般我们在
- 明确知道需要循环多少次的时候用:for;
- 不知道循环多少次的时候用:while;
#注意,条件为真while才会循环,条件为假,while停止循环
while [ condition ]
do
commands
done
---------------------- until 循 环 语 句--------------------------
#注意,条件为假until才会循环,条件为真,until停止循环
until [ condition ]
do
commands代码块
done
---------------------- case 条 件 判 断 语 句--------------------------
语法:
case 变量 in
1)
执行代码块1
;;
2)
执行代码块2
;;
......
esac
注意:每个代码块执行完毕要以;;结尾代表结束,case结尾要以倒过来写的esac来结束。
#实例

九、shell函数
语法一:
函数名 ()
{
代码块
return N
}
语法二:
function 函数名
{
代码块
return N
}
实例:
function test_function
{
echo "hello world"
}
test_function就是函数名
test_function()
{
echo "hello world"
}
test_function就是函数名
1892

被折叠的 条评论
为什么被折叠?



