Shell编程
目录
Shell编程
Shell编程
1.Shell编程
2.bash 和 sh的关系
**sh 是bash的快捷方式**
3.创建一个 .sh文件
权限不够怎么办
chmod 777 a.sh修改权限即可
4shell变量
4.1 在shell脚本中, 定义变量时,变量名不加美元符号($)如:
your_name="runoob.com"
注意 : 变量名和等号之间不能有空格,这可能和你熟悉的所有编程语言都不一样。
同时,变量名的命名须遵循如下规则:
命名只能使用英文字母,数字和下划线,首个字符不能以数字开头。
中间不能有空格,可以使用下划线(_)。
不能使用标点符号。
不能使用bash里的关键字(可用help命令查看保留关键字)。
4.2 使用一个定义过的变量,只要在变量名前面加美元符号即可
变量名外面的花括号是可选的,加不加都行,加花括号是为了帮助解释器识别变量的边界
4.3 删除变量
使用 unset 命令可以删除变量 变量被删除后不能再次使用。unset 命令不能删除只读变量。
4.4只读变量
使用 readonly 命令可以将变量定义为只读变量,只读变量的值不能被改变
4.5字符串
字符串是shell编程中最常用最有用的数据类型(除了数字和字符串,也没啥其它类型好用了),字符串可以用单
引号, 也可以用双引号,也可以不用引号。
4.6 提取字符串
str="I am goot at $skill" echo ${str:2} 输出结果为: am goot at java echo ${str:2:2} # 输出结果为: am
4.7查找字符串
str="I am goot at $skill" echo `expr index "$str" am` # 输出是: 3
4.8传递参数
4.9$* 与 $@ 区别:
相同点:都是引用所有参数。
不同点:只有在双引号中体现出来。假设在脚本运行时写了三个参数 1、2、3,,则 " * " 等价于 "1
2 3"(传递
了一个参数),而 "@" 等价于 "1" "2" "3"(传递了三个参数)。
4.10 Shell算术运算符
表达式和运算符之间要有空格,例如 2+2 是不对的,必须写成 2 + 2。
完整的表达式要被 ` 包含,注意不是单引号,在 Esc 键下边。
下表列出了常用的算术运算符,假定变量 a 为 10,变量 b 为 20:
4.11 If 结构
if condition1; then
command1
elif condition2; then
command2
else
commandN
fi
4.12关系运算符
-eq 检测两个数是否相等,相等返回 true。 equal [ $a -eq $b ] 返回 false。
-ne 检测两个数是否不相等,不相等返回 true。 not equal [ $a -ne $b ] 返回 true。
-gt 检测左边的数是否大于右边的,如果是,则返回true。 greater than [ $a -gt $b ] 返回false。
-lt 检测左边的数是否小于右边的,如果是,则返回true。less than [ $a -lt $b ] 返回true。
-ge检测左边的数是否大于等于右边的,如果是,则返回 true。Greater than orequal to[ $a -ge $b ] 返
回false。
-le 检测左边的数是否小于等于右边的,如果是,则返回 true。Less than or equalto[ $a -le $b ] 返回
true。
4.13 for循环
for variable in (list);
do
command command ...
done
例子:遍历1-100的奇数
for aa in{1..100..2}
do
echo "$aa"
done;
4.14 while
while condition ; do
command
done;
例子:计算 1~100 的和
sum=0
i=1
while [ \$i -le 100 ]; do
sum=\$[ sum + i] i=\$[ i + 1 ]
done
echo \$sum
4.15 case 值 in
case 值 in
模式1) command1 command2 ... commandN ;;
模式2) command1 command2 ... commandN ;;
esac
4.16 continent和break
continue :跳出本次循环
break:结束整个循环
4.17 传递参数给函数
4.18数组
①#!/bin/bash
my_array=(A B "C" D)
我们也可以使用下标来定义数组:
array_name[0]=value0
array_name[1]=value1
array_name[2]=value2
②读取数组所有元素的方式:${array_name[index]}
例子:
#!/bin/bash
my_array=(A B "C" D)
echo "第一个元素为: ${my_array[0]}"
echo "第二个元素为: ${my_array[1]}"
echo "第三个元素为: ${my_array[2]}"
echo "第四个元素为: ${my_array[3]}"
③获取数组长度的方式
echo "数组元素个数为: ${#数组名[*]}"
echo "数组元素个数为: ${#数组名[@]}"
④遍历数组
1. #!/bin/bash
my_arr=(AA BB CC) for var in ${my_arr[*]}
do
echo $var
done
2.my_arr=(AA BB CC)
my_arr_num=\${#my_arr[*]}
for((i=0;i<my_arr_num;i++))
do
echo "-----------------------------" echo \${my_arr[\$i]}
done
4.19 加载其他配置类的变量
#!/bin/bash
source ./test1.sh test1.sh
for var in ${my_arr[*]} doecho $var done