shell

本文详细介绍了Linuxshell中的基本语法、特殊符号的含义、eval和let的用法、命令行输入输出重定向、read命令、ping命令、RANDOM命令、运算符、流程控制结构、字符串处理技巧、函数定义、sshpass的使用以及数组操作,为Shell编程初学者提供了全面指南。
摘要由CSDN通过智能技术生成

1:特殊符号含义

> Linux shell "2>&1" 含义
> 0:输入
> 1:标准输出
> 2:错误输出
> 2>&1: 将错误重定向到标准输出。
>       #这里标准输出已经重定向到了 /dev/null。
>       #那么标准错误也会输出到/dev/null
> &:让程序后台执行
> &>:可以将错误信息或者普通信息都重定向输出
> -- :清除所有的参数设置。
> $0:获取当前脚本的执行路径(相对路径/脚本名.sh)
(与dirname[执行路径,绝对路径]和basename[脚本名]> $?:输出上一个脚本执行结果(0代表成功)
> $$:输出当前执行shell脚本的进程号(PID)。
> $#:获取参数个数
> $*:获取shell脚本传参的参数;加“ ”相当于将所有的参数当成一个参数。
> $@:获取shell脚本传参的参数;加“ ”用法效果一样。    
> $!:获取上一个在后台工作的进程号(PID)。
> -n:不换行输出;{echo -n a;echo b}==>ab
> echo -e "hello\nworkd"  # "-e"扩展正则,\n换行
> =~:左侧是字符串,右侧是一个模式,
>    #判断左侧的字符串能否被右侧的模式所匹配:通常只在 [[ ]] 
>    #中使用, 模式中可以使用行首、行尾锚定符,但是模式不要加引号。

2:eval : let : …

eval:
    用法:eval args
    例如:cat noeval.sh
        eval "echo \$$#"
     sh noeval.sh arg1 arg2 (echo $2)
     ==>arg2   
let
scale:保留小数点个数     
echo "scale=2; 2/10"|bc

3:read与ping命令

> read -p "请输入:" name
> ping -c 3 -i 0.2 -w ip   
>        # -c 指ping的次数
>        # -i 指ping的间隔时间
>        # -w 指ping不通时,间隔3秒就返回

5:RANDOM命令

$RANDOM:随机取一个数值
$[RANDOM%10+1/2/3/..n]:随机取一个[0-9]的数值+n

6:运算符

expr  +  -  \*   **  /   %  '*'
echo $[2**3]   echo $[a**3] echo $[3+5]###加减乘除
||  && ;### A ; B A执行完之后,B开始执行,前后没有逻辑关系
-z [ -z $a ] && echo y || echo n  ###-z判断字符串是否为空
-s [ -s filename ] # 判断文档不为空,则为 true
! -z [! -z $a ]  ### ! -z不为空 
-eq -ne -gt -ge -lt -le ###equal,than,great,less,not
-e :判断文件是否存在{exist}
-d :判断是否为目录
-f :判断是否为文件
-a : 且
-o : 或
-z : 是否为空
-n : 不为空
-r -w -x :判断是否可读写执。。
cat tac  ###与cat相反输出
wait  ###等后台所有进程都结束后再退出。。
${#str} ###获取字符串str的长度
条件判断案例:
https://blog.csdn.net/shang_feng_wei/article/details/90378017

7:赋值运算

a=`who | wc -l`
b=$(who | wc -l)

8:for循环格式

for 变量名 in 值列表
do
    命令格式
done   
例如:
for passwd in `cat /etc/passwd`
do
    let i+=1
    echo $i:$passwd
done   
值模板:
`ls /etc/*.conf`
{1..10}  ###1 2 3 .. 10
`seq 3 5`  ###3 4 5  最小值为3,最大值为5
`seq 3 2 10` ### 3 5 7 9 最小值为3,最大值为10,切片为2
echo -n ""   ####在循环中,-n ""代表不换行输出

9:while循环

格式:    
while [条件测试]
do
    命令序列
done

10:if判断格式

if  [ 条件  ]
then
    ...
else
    ...
fi    

11:case

格式:
case 变量值 in
值1)
    命令序列1;;
值2)
    命令序列2;;
*)
    默认命令序列
esac       
例如:
 $1 $2
case $1 in
- n)
    echo $2;;
- c)
    echo $2;;
- r)
    echo $2;;
esac    

12:函数

格式1:
function 函数名{
    命令序列    
}



格式2:
函数名(){
    命令序列
}
例如:
mycd(){
    mkdir $1
}
调用:mycd /abc
创建 /abc 目录

字符串处理

abc=17603726391
echo ${#abc} ===> 11 ##  $#获取参数个数
接取字符串的3种方法::
方法一:
下标从0开始
echo ${abc::6} ===> 176037 ###从0开始,截取6位
echo ${abc:2:6} ===> 603726 ###从2开始,截取6位
方法二:
下标从1开始
expr substr "$abc" 1 6 ==> 172037
方法三:
cut命令,下标从1开始
echo $abc |cut -b 1-6 -4 4 4- 8,10

字符串替换

格式:
${变量名/old/new}  ### "/" 指替换第一个匹配到的
${变量名//old/new} ### "//" 替换所有匹配到的

掐头去尾

格式
${变量名#匹配值}   ###去掉开头 含有匹配值的
${变量名##匹配值}  ### “##”代表所有
a= root:x:0:0:root:/root:/bin/bash
${a#*:}   ###以 ":" 为分隔符,匹配到第一个":"之前的删除掉
${a##*:}  ###匹配所有,以":"为分隔符,把最后一个":"之前的都删掉
${a%:*}   ###删除掉从右往左,第一个":"后边的所有内容
${a%%:*}  ###删除掉从右往左,最后一个":"后边的所有内容
例如:
${a##*i}  ###删除i前面的所有

xx=11
echo ${xx:-123}  ####如果xx不存在则输出123,如果存在,输出xx

sshpass详解:

用于非交互的ssh密码验证
yum -y install sshpass
sshpass -p [passwd] ssh -p [port] root@192.168.X.X
sshpass -p [passwd] scp txt root@ip:/
相关网站解释:
https://blog.csdn.net/weixin_33819479/article/details/89820084
  • sshpass案例
#!/bin/bash
for ip in `cat /root/ip`
do
   sshpass -p "Yu20(zhong)21qu"  ssh -p 22 root@$ip "date -R"
   #ssh root@$ip "date -R"
done
  • 数组案例
https://blog.csdn.net/cpongo1/article/details/89548709
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值