一:变量
命名规则:
- 命名只能使用英文字母,数字和下划线,首个字符不能以数字开头。
- 中间不能有空格,可以使用下划线(_)。
- 不能使用标点符号。
- 不能使用bash里的关键字(可用help命令查看保留关键字)。
变量使用:
$your_name
${your_name}
"My name is ${your_name}"
推荐给所有变量加上花括号,这是一个人好的编程习惯。
只读变量:
myurl="my name is kenny"
readonly myurl
再去给变量赋值是不可实现的
删除变量:
uset myurl #此时变量已经被删除
shell变量:
环境变量,局部变量,shell变量
Shell字符串:
1:单引号和双引号区别
单引号中不能出现单引号,用转义字符转义也不行,双引号可以
单引号中不能出现变量,双引号可以
2:拼接字符串
$aa$bb
3.获取字符串长度
str=“asfgsdfg”
echo ${#str} 会输出字符串长度
4.提取字符串
echo ${str:1:6} #会输出di第2到7位
5.查找字符串位置
echo `expr index "$str" f` #输出字符串f在字符串中的位置
二:参数传递
1.$n 传递参数
2.$# 传递参数个数
3.$* 以一个单字符串显示所有向脚本传递的参数
4.$@ $*相同,但是使用时加引号,并在引号中返回每个参数。
5.$$ 脚本运行的当前进程ID号
6.$! 后台运行的最后一个进程的ID号
7.$? 表示上一条命令的返回值
8.$0 Shell本身的文件名
9.$1~$n 添加到Shell的各参数值。$1是第1参数、$2是第2参数…
三:数组
规则:
1:shell只支持一维数组,不支持多维
2:shell数组用括号括起来表示,元素之间用空格隔开
my_array=(A B C D)
输出:
echo “${my_array[0]}”
获取所有数组元素:
echo "数组的元素为: ${my_array[*]}"
echo "数组的元素为: ${my_array[@]}"
获取数组长度:
echo "数组的元素为: ${#my_array[*]}"
echo "数组的元素为: ${#my_array[@]}"
注意事项:
1:数组元素可以为变量
my_array=($A B C D)
四:运算符
shell中运算符分为6种:
1:算术运算符
2:关系运算符
3:布尔运算符
4:字符串运算符
5:文件测试运算符
详解:
1:算术运算符
val='exper 2 + 2' #输出为4
注意2 + 2之间运算符和数字之间一定要有空格,否则会按字符串输出
2:关系运算符
3:布尔运算符
4:逻辑运算符
5:字符串运算符
6:文件测试运算符
二:echo
1:显示转义字符
echo "" myname ""
2:显示变量
echo "$name It is a test"
3:换行
cheo "hello word "
4:不换行
echo -e "OK! c" # -e 开启转义 c 不换行
echo "It is a test"
5:显示结果重定向
echo "It is a test" > myfile
三:流程控制
if...else
if [ $exitstatus = 0 ]; then if [ ! $PET ]; then echo "you have not input a word!" else echo $PTION if [ $PTION = 1 ]; then echo "Your ip is:" $PET echo -e " #" $PET " 0.0.0.0 10${PET} 172.17.17.${PET} 3389">>/root/aa.sh else echo "Your ip is:" $PET echo -e " #" $PET " 0.0.0.0 10${PET} 172.17.17.${PET} 22">>/root/aa.sh echo -e "0.0.0.0 20${PET} 172.17.17.${PET} 80">>/root/aa.sh echo -e "0.0.0.0 30${PET} 172.17.17.${PET} 9091">>/root/aa.sh fi fi else echo "You chose Cancel." fi
for
for loop in 1 2 3 4 5 do echo "The value is: $loop" done
while
int=1 while(( $int<=5 )) do echo $int let "int++" done
until
case
case "$1" in -c) BackupControllerConfig ;; -p) BackupComputeConfig ;; -rc) RestoreControllerConfig ;; -rp) RestoreComputeConfig ;; -ri) RintedConfig ;; *) Openstack_help exit 0 esac
break
break命令允许跳出所有循环(终止执行后面的所有循环)。
continue
continue命令与break命令类似,只有一点差别,它不会跳出所有循环,仅仅跳出当前循环。
其他:
shell脚本中获取当前路径
$(cd `dirname $0`; pwd)
-E表示一旦出错,就退出当前的shell。
bash -E /root/1.sh
$? 上个命令的退出状态,或函数的返回值。
-ne 是不等于
check_exit(){ if [ $? -ne 0 ]; then echo -e " 33[41;37m[Error]: have a error 33[0m" exit 1 fi }
解压安装包到/opt/目录下
tar -zxf ./packages/s3_bs_install.2* -C /opt/
当前bash环境下读取并执行FileName中的命令
source ./config/deploy-config
允许您创建简短的程序,这些程序读取输入文件、为数据排序、处理数据、对输入执行计算以及生成报表,还有无数其他的功能。
对获取的字符串进行排序排重
$(echo ${all_ips_old} | awk '{for(i =1; i <=NF; i++){ if($i~/[0-9].[0-9]/) print $i }}'|sort -u)
1:export 使变量为全局变量
2:使用加-o StrictHostKeyChecking=no参数,SSH 公钥检查是一个重要的安全机制,可以防范中间人劫持等黑客攻击。但是在特定情况下,严格的 SSH 公钥检查会破坏一些依赖 SSH 协议的自动化任务,就需要一种手段能够绕过 SSH 的公钥检查
export autossh="ssh -i ${ssh_private_key} -o StrictHostKeyChecking=no"
#-q: 不显示传输进度条 export autoscp="scp -i ${ssh_private_key} -o StrictHostKeyChecking=no -q"