Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁。Shell 既是一种命令语言,又是一种程序设计语言。学习shell命令主要是为了如下:
1)需要看懂运维人员编写的Shell程序。
2)偶尔会编写一些简单Shell程序来管理集群、提高开发效率。
1. Shell变量
变量的命名规则如下:
1)命名只能使用英文字母,数字和下划线,首个字符不能以数字开头。
2)中间不能有空格,可以使用下划线(_)。
3)不能使用标点符号。
4)不能使用bash里的关键字(可用help命令查看保留关键字)。
_var="hello world"
通过$
+变量名访问该变量
echo $_var
可以通过readonly
命令设置变量只读
readonly _var
可以通过unset
删除该变量,之后将无法访问该变量。
unset -var
单引号中的任何字符串都会进行原样输出,但是双引号中将会把变量替换为真实的值。
name=hello
echo '$name,world'
echo "$name, world"
echo $name"world"
echo $name'world'
输出的结果为
$name,world
hello, world
helloworld
helloworld
字符串的一些函数
str="hello,world"
echo ${#str} //打印该字符串的长度
echo ${str:1:4} //从下标为1 的字符串截取长度为4 的字符
数组的定义方式
1. arr_name=(value1 value2 ...)
2. arr_name=(
value1
value2
...
)
3. arr_name[0]=value1
arr_name[1]=value2
echo ${arr_name[index]} //获取对应下标的字符串,当index的值是@表示取所有
echo ${#arr_name[index]} //获取对应下标的长度
2. Shell传递参数
echo 'echo $0 $1 $2' > test.sh
sh test.sh 1 2
输出: test.sh 1 2
常用的关于参数的访问如下
$n 获取传递脚本中第n个参数,0代表执行的文件名称,n大于10时,要用${n}
$# 传递到脚本的参数个数
$* 以一个'单'字符串显示所有向脚本传递的参数。
$$ 脚本运行的当前进程ID号
$! 后台运行的最后一个进程的ID号
$@ 显示所有向脚本传递的参数
$? 显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误。
3. Shell运算符
基本语法
`expr 运算式` eg: val=`expr 2 + 2` 注:expr运算符间要有空格
$(( 运算式)) eg: val=$((2+2))
$[运算式] eg: val=$[2+2]
支持的所有运算符包括算数运算符、关系运算符、布尔运算符和逻辑运算符等等。
4.流程控制
1.IF ELSE
if condition1
then
command1
elif condition2
then
command2
else
commandN
fi
eg: 判断传入参数的大小
l=$1
r=$2
if [ $l == $r ]
then
echo "$l和$r相等"
elif [ $l -gt $r ]
then
echo "$l大于$r"
else
echo "$l小于$r"
fi
if else也经常和tes命令结合起来使用
if test 1 -eq 1
then echo "相等"
else echo "不相等"
fi
- for循环
基本语法如下:
for var in item1 item2 ... itemN
do
command1
command2
...
done
eg:遍历并输出数组中的每个元素
arr=(1 2 3 4)
for item in ${arr[@]}
do
echo "值为:$item"
done
3.while 循环
基础语法如下:
while condition
do
command
done
eg: 输出10以内的偶数
n=0
while (($n <= 10))
do
printf "%s \t" $n
n=$[2+$n]
done
4.无限循环
1.
while :
do
command
done
2
while true
do
command
done
3
for (( ; ; ))
do
command
done
- util循环
在满足条件之前,一直会执行
until condition
do
command
done
- case选择
基本语法如下
case 值 in
模式1)
command1
command2
...
;;
模式2)
command1
command2
...
;;
esac
eg: 根据选择的数字进行回应
echo '请输入你的选择'
case $1 in
1)
echo "你选择了1" ;;
2)
echo "你选择了2";;
*)
echo "你选择了其他";;
esac
5. Shell函数
基本语法如下:
[ function ] funname [()]
{
action;
[return int;]
}
eg:对传入参数求和
function add(){
echo "从函数中传递的参数为$1"
echo "这是一个求和的函数"
echo "请输入第一个参数"
read a
echo "请输入第二个参数"
read b
return $[ $a + $b ];
}
echo "函数开始"
var1=$[$1+1]
add $var1
var=$?
echo "函数执行结束,结果为$var"