shell 相关的基础知识

shell 相关的基础知识

变量

var=value
var="value ${var}"  
var='$var'
  • 定义变量时=两边不能有空格,
  • 单引号表示是字符串,其中的变量不会进行解释,
  • 双引号,字符串中的变量会用它的值进行替换

echo printf

  • echo 打印输出字符串
  • printf 格式化打印输出字符串,与c语言的printf()比较类似

{} 扩展

mv /usr/bin/file{,.bak}
{1..50} # 可以扩展为1到50
{a..z}  # a b c .. z

将/usr/bin下的file文件生命名为file.bak,通过 { } 可以不用多敲一遍路径

字符串长度

${#var}
如果存在变量var则给出字符串长度,否则输出0

shell 类型

$0 or $SHELL

查看环境变量

env  
$UID  用户ID,root用户ID为0
$PS1  命令行提示符
$PATH 环境变量
$HOME 家目录 
$PWD  当前目录
$USER 当前用户

$? 上一个命令执行后的退出状态,0 ->成功执行

算术运算

let (()) []
expr bc
#!/bin/bash
# mathdemo.sh
no1=34
no2=20
let result=no1+no2
echo $result
res=$[ no1 - no2 ]
ans=$((no1+no2))
ans2=$(expr 3 + 4)
echo $res
echo $ans 
echo $ans2
echo '4*2.89' | bc
  • 使用let时,变量不用加$ 符号
  • bc可以进行浮点数运算

文件描述符及重定向

stdin   0
stdout  1
stderr  2
<       定向到标准输入流
>       定向到标准输出流
2>      定向到标准错误流 
>>      追加
&>      将stdoutstderr 合并并进行重定向

自定义文件描述符

0,1,2是stdin,stdout和stderr的预留描述符。
文件打开模式:
- 只读模式 <
- 截断模式 >
- 追加模式 >>

# 创建一个文件描述符进行读取
exec 3< read.file    
# 创建一个文件描述符进行截断写入
exec 4> write.file
# 创建一个文件描述符进行文件的追加
exec 5>> append.file

数组与关联数组

#!/bin/bash
# 数组索引从0开始
array=(1 2 3 4 5)
index=2
echo ${array[0]}
echo ${array[$index]}
#打印出所有数组的值
echo ${array[*]}
echo ${array[@]}
# 打印数组长度
echo ${#array[@]}

关联数组:

declare -A ass_array
ass_array=([index1]=varlue1 [index2]=varlue2)
# 列出数组索引
echo ${!ass_array[*]}
echo ${!ass_array[@]}

stty

# 设置读取密码时不输出到终端
stty -echo 
read password
stty echo
echo input passworld success

shell 调试

bash -x script.sh 
-x #将脚本中执行过的每一行都输出到stdout
set -x
set +x 禁止调试
set -v
set +v 禁止打印输入 

通过选项-x可以启动调试shell脚本

函数

function fname()
{
statements;
}
or
fname()
{
statements;
} 
fname #执行函数
fname arg1 arg2 #传递参数
$1 第一个参数
$2 第二个参数
$@ 可以扩展为"$1" "$2" ...
export -f fname #导出函数,函数扩展到子进程

子shell

cmd_output=$(command)
cmd_output=`command`

可以通过子shell读取命令的输出

子shell生成单独进程

(command)   #会在一个子进程中执行
out="$(cat file)" #通过引号引用子shell可以保留空格与换行

read

   #!/bin/bash
   # 不回显地读取数据
   read -s var
   # 显示提示信息
   read -p "prompt: " var
   # 在2秒内读取数据
   read -t 2 var
   # e用定界符结束输入行
   read -d ":" var

内部分隔符 IFS

IFS 默认为空白字符

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值